@react-three/fiber 9.0.0-rc.0 → 9.0.0-rc.10

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @react-three/fiber
2
2
 
3
+ ## 8.17.14
4
+
5
+ ### Patch Changes
6
+
7
+ - eeeed16b: fix: update use-measure
8
+
9
+ ## 8.17.13
10
+
11
+ ### Patch Changes
12
+
13
+ - 0a0f2acd: fix: upstream use-measure
14
+
15
+ ## 8.17.12
16
+
17
+ ### Patch Changes
18
+
19
+ - ff1a16f1: fix: narrow React peer dep range
20
+
21
+ ## 8.17.11
22
+
23
+ ### Patch Changes
24
+
25
+ - 7461bf0c: fix: loosen instanceof checks for CSB issue
26
+
3
27
  ## 8.17.10
4
28
 
5
29
  ### Patch Changes
@@ -56,6 +56,7 @@ export interface EventHandlers {
56
56
  onPointerMissed?: (event: MouseEvent) => void;
57
57
  onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void;
58
58
  onWheel?: (event: ThreeEvent<WheelEvent>) => void;
59
+ onLostPointerCapture?: (event: ThreeEvent<PointerEvent>) => void;
59
60
  }
60
61
  export type FilterFunction = (items: THREE.Intersection[], state: RootState) => THREE.Intersection[];
61
62
  export type ComputeFunction = (event: DomEvent, root: RootState, previous?: RootState) => void;
@@ -2,10 +2,10 @@ import * as THREE from 'three';
2
2
  import * as React from 'react';
3
3
  import { RootState, RenderCallback, RootStore } from "./store.js";
4
4
  import { ObjectMap } from "./utils.js";
5
- import type { Instance } from "./reconciler.js";
5
+ import type { Instance, ConstructorRepresentation } from "./reconciler.js";
6
6
  /**
7
7
  * Exposes an object's {@link Instance}.
8
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useinstancehandle
8
+ * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle
9
9
  *
10
10
  * **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions.
11
11
  */
@@ -31,22 +31,23 @@ export declare function useFrame(callback: RenderCallback, renderPriority?: numb
31
31
  * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph
32
32
  */
33
33
  export declare function useGraph(object: THREE.Object3D): ObjectMap;
34
- export interface Loader<T> extends THREE.Loader {
35
- load(url: string | string[] | string[][], onLoad?: (result: T, ...args: any[]) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: unknown) => void): unknown;
36
- }
37
- export type LoaderProto<T> = new (...args: any[]) => Loader<T>;
38
- export type LoaderResult<T> = T extends {
34
+ type InputLike = string | string[] | string[][] | Readonly<string | string[] | string[][]>;
35
+ type LoaderLike = THREE.Loader<any, InputLike>;
36
+ type GLTFLike = {
39
37
  scene: THREE.Object3D;
40
- } ? T & ObjectMap : T;
41
- export type Extensions<T> = (loader: Loader<T>) => void;
38
+ };
39
+ type LoaderInstance<T extends LoaderLike | ConstructorRepresentation<LoaderLike>> = T extends ConstructorRepresentation<LoaderLike> ? InstanceType<T> : T;
40
+ export type LoaderResult<T extends LoaderLike | ConstructorRepresentation<LoaderLike>> = Awaited<ReturnType<LoaderInstance<T>['loadAsync']>> extends infer R ? R extends GLTFLike ? R & ObjectMap : R : never;
41
+ export type Extensions<T extends LoaderLike | ConstructorRepresentation<LoaderLike>> = (loader: LoaderInstance<T>) => void;
42
42
  /**
43
43
  * Synchronously loads and caches assets with a three loader.
44
44
  *
45
45
  * Note: this hook's caller must be wrapped with `React.Suspense`
46
46
  * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader
47
47
  */
48
- export declare function useLoader<T, U extends string | string[] | string[][]>(loader: Loader<T> | LoaderProto<T>, input: U, extensions?: Extensions<T>, onProgress?: (event: ProgressEvent) => void): U extends any[] ? LoaderResult<T>[] : LoaderResult<T>;
48
+ export declare function useLoader<I extends InputLike, L extends LoaderLike | ConstructorRepresentation<LoaderLike>>(loader: L, input: I, extensions?: Extensions<L>, onProgress?: (event: ProgressEvent<EventTarget>) => void): I extends any[] ? LoaderResult<L>[] : LoaderResult<L>;
49
49
  export declare namespace useLoader {
50
- var preload: <T, U extends string | string[] | string[][]>(loader: Loader<T> | LoaderProto<T>, input: U, extensions?: Extensions<T> | undefined) => void;
51
- var clear: <T, U extends string | string[] | string[][]>(loader: Loader<T> | LoaderProto<T>, input: U) => void;
50
+ var preload: <I extends InputLike, L extends LoaderLike | ConstructorRepresentation<LoaderLike>>(loader: L, input: I, extensions?: Extensions<L> | undefined) => void;
51
+ var clear: <I extends InputLike, L extends LoaderLike | ConstructorRepresentation<LoaderLike>>(loader: L, input: I) => void;
52
52
  }
53
+ export {};
@@ -6,7 +6,7 @@ export { flushGlobalEffects, addEffect, addAfterEffect, addTail, invalidate, adv
6
6
  export type { AttachFnType, AttachType, ConstructorRepresentation, Catalogue, Args, InstanceProps, Instance, } from "./reconciler.js";
7
7
  export { extend, reconciler } from "./reconciler.js";
8
8
  export type { ReconcilerRoot, GLProps, CameraProps, RenderProps, InjectState } from "./renderer.js";
9
- export { _roots, render, createRoot, unmountComponentAtNode, createPortal } from "./renderer.js";
9
+ export { _roots, createRoot, unmountComponentAtNode, createPortal } from "./renderer.js";
10
10
  export type { Subscription, Dpr, Size, Viewport, RenderCallback, Frameloop, Performance, Renderer, XRManager, RootState, RootStore, } from "./store.js";
11
11
  export { context } from "./store.js";
12
12
  export type { ObjectMap, Camera, Disposable, Act } from "./utils.js";
@@ -5,9 +5,6 @@ import { IsAllOptional } from "./utils.js";
5
5
  import type { RootStore } from "./store.js";
6
6
  import { type EventHandlers } from "./events.js";
7
7
  import type { ThreeElement } from "../three-types.js";
8
- declare module 'react-reconciler/constants' {
9
- const NoEventPriority = 0;
10
- }
11
8
  export interface Root {
12
9
  fiber: Reconciler.FiberRoot;
13
10
  store: RootStore;
@@ -28,7 +25,6 @@ type ArgsProp<P> = P extends ConstructorRepresentation ? IsAllOptional<Construct
28
25
  };
29
26
  export type InstanceProps<T = any, P = any> = ArgsProp<P> & {
30
27
  object?: T;
31
- visible?: boolean;
32
28
  dispose?: null;
33
29
  attach?: AttachType<T>;
34
30
  onUpdate?: (self: T) => void;
@@ -48,7 +44,6 @@ export interface Instance<O = any> {
48
44
  previousAttach?: any;
49
45
  isHidden: boolean;
50
46
  }
51
- export declare const catalogue: Catalogue;
52
47
  export declare function extend<T extends ConstructorRepresentation>(objects: T): React.ExoticComponent<ThreeElement<T>>;
53
48
  export declare function extend<T extends Catalogue>(objects: T): void;
54
49
  export declare const reconciler: Reconciler.Reconciler<RootStore, Instance<any>, void, Instance<any>, any>;
@@ -8,7 +8,10 @@ import { type Properties, Camera } from "./utils.js";
8
8
  interface OffscreenCanvas extends EventTarget {
9
9
  }
10
10
  export declare const _roots: Map<HTMLCanvasElement | OffscreenCanvas, Root>;
11
- export type GLProps = Renderer | ((canvas: HTMLCanvasElement | OffscreenCanvas) => Renderer) | Partial<Properties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters>;
11
+ export type DefaultGLProps = Omit<THREE.WebGLRendererParameters, 'canvas'> & {
12
+ canvas: HTMLCanvasElement | OffscreenCanvas;
13
+ };
14
+ export type GLProps = Renderer | ((defaultProps: DefaultGLProps) => Renderer) | ((defaultProps: DefaultGLProps) => Promise<Renderer>) | Partial<Properties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters>;
12
15
  export type CameraProps = (Camera | Partial<ThreeElement<typeof THREE.Camera> & ThreeElement<typeof THREE.PerspectiveCamera> & ThreeElement<typeof THREE.OrthographicCamera>>) & {
13
16
  /** Flags the camera as manual, putting projection into your own hands */
14
17
  manual?: boolean;
@@ -61,12 +64,11 @@ export interface RenderProps<TCanvas extends HTMLCanvasElement | OffscreenCanvas
61
64
  onPointerMissed?: (event: MouseEvent) => void;
62
65
  }
63
66
  export interface ReconcilerRoot<TCanvas extends HTMLCanvasElement | OffscreenCanvas> {
64
- configure: (config?: RenderProps<TCanvas>) => ReconcilerRoot<TCanvas>;
67
+ configure: (config?: RenderProps<TCanvas>) => Promise<ReconcilerRoot<TCanvas>>;
65
68
  render: (element: React.ReactNode) => RootStore;
66
69
  unmount: () => void;
67
70
  }
68
71
  export declare function createRoot<TCanvas extends HTMLCanvasElement | OffscreenCanvas>(canvas: TCanvas): ReconcilerRoot<TCanvas>;
69
- export declare function render<TCanvas extends HTMLCanvasElement | OffscreenCanvas>(children: React.ReactNode, canvas: TCanvas, config: RenderProps<TCanvas>): RootStore;
70
72
  export declare function unmountComponentAtNode<TCanvas extends HTMLCanvasElement | OffscreenCanvas>(canvas: TCanvas, callback?: (canvas: TCanvas) => void): void;
71
73
  export type InjectState = Partial<Omit<RootState, 'events'> & {
72
74
  events?: {
@@ -2,7 +2,7 @@ import * as THREE from 'three';
2
2
  import * as React from 'react';
3
3
  import { Instance } from "./reconciler.js";
4
4
  import type { Fiber } from 'react-reconciler';
5
- import type { Dpr, Renderer, RootStore, Size } from "./store.js";
5
+ import type { Dpr, RootStore, Size } from "./store.js";
6
6
  export type NonFunctionKeys<P> = {
7
7
  [K in keyof P]-?: P[K] extends Function ? never : K;
8
8
  }[keyof P];
@@ -17,23 +17,6 @@ export type IsAllOptional<T extends any[]> = T extends [infer First, ...infer Re
17
17
  * Returns the instance's initial (outmost) root.
18
18
  */
19
19
  export declare function findInitialRoot<T>(instance: Instance<T>): RootStore;
20
- /**
21
- * Returns `true` with correct TS type inference if an object has a configurable color space (since r152).
22
- */
23
- export declare const hasColorSpace: <T extends object | THREE.Texture | Renderer, P = T extends Renderer ? {
24
- outputColorSpace: string;
25
- } : {
26
- colorSpace: string;
27
- }>(object: T) => object is T & P;
28
- export type ColorManagementRepresentation = {
29
- enabled: boolean | never;
30
- } | {
31
- legacyMode: boolean | never;
32
- };
33
- /**
34
- * The current THREE.ColorManagement instance, if present.
35
- */
36
- export declare const getColorManagement: () => ColorManagementRepresentation | null;
37
20
  export type Act = <T = any>(cb: () => Promise<T>) => Promise<T>;
38
21
  /**
39
22
  * Safely flush async effects when testing, simulating a legacy root.
@@ -44,6 +27,7 @@ export type Camera = (THREE.OrthographicCamera | THREE.PerspectiveCamera) & {
44
27
  };
45
28
  export declare const isOrthographicCamera: (def: Camera) => def is THREE.OrthographicCamera;
46
29
  export declare const isRef: (obj: any) => obj is React.RefObject<unknown>;
30
+ export declare const isColorRepresentation: (value: unknown) => value is THREE.ColorRepresentation;
47
31
  /**
48
32
  * An SSR-friendly useLayoutEffect.
49
33
  *
@@ -68,21 +52,85 @@ export type UnblockProps = {
68
52
  children: React.ReactNode;
69
53
  };
70
54
  export declare function Block({ set }: Omit<UnblockProps, 'children'>): null;
71
- export declare class ErrorBoundary extends React.Component<{
72
- set: React.Dispatch<Error | undefined>;
73
- children: React.ReactNode;
74
- }, {
75
- error: boolean;
76
- }> {
77
- state: {
78
- error: boolean;
55
+ export declare const ErrorBoundary: {
56
+ new (props: {
57
+ set: React.Dispatch<Error | undefined>;
58
+ children: React.ReactNode;
59
+ }): {
60
+ state: {
61
+ error: boolean;
62
+ };
63
+ componentDidCatch(err: Error): void;
64
+ render(): React.ReactNode;
65
+ context: unknown;
66
+ setState<K extends "error">(state: {
67
+ error: boolean;
68
+ } | ((prevState: Readonly<{
69
+ error: boolean;
70
+ }>, props: Readonly<{
71
+ set: React.Dispatch<Error | undefined>;
72
+ children: React.ReactNode;
73
+ }>) => {
74
+ error: boolean;
75
+ } | Pick<{
76
+ error: boolean;
77
+ }, K> | null) | Pick<{
78
+ error: boolean;
79
+ }, K> | null, callback?: (() => void) | undefined): void;
80
+ forceUpdate(callback?: (() => void) | undefined): void;
81
+ readonly props: Readonly<{
82
+ set: React.Dispatch<Error | undefined>;
83
+ children: React.ReactNode;
84
+ }>;
85
+ componentDidMount?(): void;
86
+ shouldComponentUpdate?(nextProps: Readonly<{
87
+ set: React.Dispatch<Error | undefined>;
88
+ children: React.ReactNode;
89
+ }>, nextState: Readonly<{
90
+ error: boolean;
91
+ }>): boolean;
92
+ componentWillUnmount?(): void;
93
+ getSnapshotBeforeUpdate?(prevProps: Readonly<{
94
+ set: React.Dispatch<Error | undefined>;
95
+ children: React.ReactNode;
96
+ }>, prevState: Readonly<{
97
+ error: boolean;
98
+ }>): any;
99
+ componentDidUpdate?(prevProps: Readonly<{
100
+ set: React.Dispatch<Error | undefined>;
101
+ children: React.ReactNode;
102
+ }>, prevState: Readonly<{
103
+ error: boolean;
104
+ }>, snapshot?: any): void;
105
+ componentWillMount?(): void;
106
+ UNSAFE_componentWillMount?(): void;
107
+ componentWillReceiveProps?(nextProps: Readonly<{
108
+ set: React.Dispatch<Error | undefined>;
109
+ children: React.ReactNode;
110
+ }>): void;
111
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{
112
+ set: React.Dispatch<Error | undefined>;
113
+ children: React.ReactNode;
114
+ }>): void;
115
+ componentWillUpdate?(nextProps: Readonly<{
116
+ set: React.Dispatch<Error | undefined>;
117
+ children: React.ReactNode;
118
+ }>, nextState: Readonly<{
119
+ error: boolean;
120
+ }>): void;
121
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<{
122
+ set: React.Dispatch<Error | undefined>;
123
+ children: React.ReactNode;
124
+ }>, nextState: Readonly<{
125
+ error: boolean;
126
+ }>): void;
79
127
  };
80
- static getDerivedStateFromError: () => {
128
+ getDerivedStateFromError: () => {
81
129
  error: boolean;
82
130
  };
83
- componentDidCatch(err: Error): void;
84
- render(): React.ReactNode;
85
- }
131
+ contextType?: React.Context<any> | undefined;
132
+ propTypes?: any;
133
+ };
86
134
  export interface ObjectMap {
87
135
  nodes: {
88
136
  [name: string]: THREE.Object3D;
@@ -111,6 +159,7 @@ export declare const is: {
111
159
  num: (a: any) => a is number;
112
160
  boo: (a: any) => a is boolean;
113
161
  und: (a: any) => boolean;
162
+ nul: (a: any) => boolean;
114
163
  arr: (a: any) => boolean;
115
164
  equ(a: any, b: any, { arrays, objects, strict }?: EquConfig): boolean;
116
165
  };
@@ -135,4 +184,4 @@ export declare function diffProps<T = any>(instance: Instance<T>, newProps: Inst
135
184
  export declare function applyProps<T = any>(object: Instance<T>['object'], props: Instance<T>['props']): Instance<T>['object'];
136
185
  export declare function invalidateInstance(instance: Instance): void;
137
186
  export declare function updateCamera(camera: Camera, size: Size): void;
138
- export declare const isObject3D: (object: any) => object is THREE.Object3D<THREE.Event>;
187
+ export declare const isObject3D: (object: any) => object is THREE.Object3D<THREE.Object3DEventMap>;
@@ -4,11 +4,10 @@ import { RenderProps } from "../core/index.js";
4
4
  export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size' | 'dpr'>, Omit<ViewProps, 'children'> {
5
5
  children: React.ReactNode;
6
6
  style?: ViewStyle;
7
- }
8
- export interface Props extends CanvasProps {
7
+ ref?: React.Ref<View>;
9
8
  }
10
9
  /**
11
10
  * A native canvas which accepts threejs elements as children.
12
11
  * @see https://docs.pmnd.rs/react-three-fiber/api/canvas
13
12
  */
14
- export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<View>>;
13
+ export declare function Canvas(props: CanvasProps): import("react/jsx-runtime").JSX.Element;
@@ -33,8 +33,12 @@ export interface ReactProps<P> {
33
33
  export type ElementProps<T extends ConstructorRepresentation, P = InstanceType<T>> = Partial<Overwrite<P, MathProps<P> & ReactProps<P> & EventProps<P>>>;
34
34
  export type ThreeElement<T extends ConstructorRepresentation> = Mutable<Overwrite<ElementProps<T>, Omit<InstanceProps<InstanceType<T>, T>, 'object'>>>;
35
35
  type ThreeExports = typeof THREE;
36
+ type DuplicateKeys<T, U> = Extract<keyof T, keyof U>;
37
+ type Conflicts = DuplicateKeys<JSX.IntrinsicElements, {
38
+ [K in keyof ThreeExports as Uncapitalize<K>]: any;
39
+ }>;
36
40
  type ThreeElementsImpl = {
37
- [K in keyof ThreeExports as Uncapitalize<K>]: ThreeExports[K] extends ConstructorRepresentation ? ThreeElement<ThreeExports[K]> : never;
41
+ [K in keyof ThreeExports as Uncapitalize<K> extends Conflicts ? `three${Capitalize<K>}` : Uncapitalize<K>]: ThreeExports[K] extends ConstructorRepresentation ? ThreeElement<ThreeExports[K]> : never;
38
42
  };
39
43
  export interface ThreeElements extends ThreeElementsImpl {
40
44
  primitive: Omit<ThreeElement<any>, 'args'> & {
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react';
2
- import { Options as ResizeOptions } from "./use-measure.js";
2
+ import { Options as ResizeOptions } from 'react-use-measure';
3
3
  import { RenderProps } from "../core/index.js";
4
4
  export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size'>, React.HTMLAttributes<HTMLDivElement> {
5
5
  children: React.ReactNode;
6
+ ref?: React.Ref<HTMLCanvasElement>;
6
7
  /** Canvas fallback content, similar to img's alt prop */
7
8
  fallback?: React.ReactNode;
8
9
  /**
@@ -15,10 +16,8 @@ export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size'
15
16
  /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
16
17
  eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen';
17
18
  }
18
- export interface Props extends CanvasProps {
19
- }
20
19
  /**
21
20
  * A DOM canvas which accepts threejs elements as children.
22
21
  * @see https://docs.pmnd.rs/react-three-fiber/api/canvas
23
22
  */
24
- export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<HTMLCanvasElement>>;
23
+ export declare function Canvas(props: CanvasProps): import("react/jsx-runtime").JSX.Element;