@react-three/fiber 9.0.0-beta.1 → 9.0.0-rc.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/CHANGELOG.md +66 -0
- package/dist/declarations/src/core/events.d.ts +91 -0
- package/dist/declarations/src/core/hooks.d.ts +52 -0
- package/dist/declarations/src/core/index.d.ts +13 -0
- package/dist/declarations/src/core/loop.d.ts +31 -0
- package/dist/declarations/src/core/reconciler.d.ts +55 -0
- package/dist/declarations/src/core/renderer.d.ts +87 -0
- package/dist/declarations/src/core/store.d.ts +130 -0
- package/dist/declarations/src/core/utils.d.ts +138 -0
- package/dist/declarations/src/index.d.ts +6 -0
- package/dist/declarations/src/native/Canvas.d.ts +14 -0
- package/dist/declarations/src/native/events.d.ts +4 -0
- package/dist/declarations/src/native.d.ts +6 -0
- package/dist/declarations/src/three-types.d.ts +62 -0
- package/dist/declarations/src/web/Canvas.d.ts +24 -0
- package/dist/declarations/src/web/events.d.ts +4 -0
- package/dist/declarations/src/web/use-measure.d.ts +34 -0
- package/dist/{loop-b00a3b86.esm.js → events-5a08b43f.esm.js} +91 -5
- package/dist/{loop-dfcc9ca9.cjs.prod.js → events-aef54ace.cjs.prod.js} +91 -4
- package/dist/{loop-eb3c7218.cjs.dev.js → events-fa0fb3db.cjs.dev.js} +91 -4
- package/dist/react-three-fiber.cjs.dev.js +230 -122
- package/dist/react-three-fiber.cjs.prod.js +230 -122
- package/dist/react-three-fiber.esm.js +193 -84
- package/native/dist/react-three-fiber-native.cjs.dev.js +190 -128
- package/native/dist/react-three-fiber-native.cjs.prod.js +190 -128
- package/native/dist/react-three-fiber-native.esm.js +157 -95
- package/package.json +88 -86
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { View, type ViewProps, type ViewStyle } from 'react-native';
|
|
3
|
+
import { RenderProps } from "../core/index.js";
|
|
4
|
+
export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size' | 'dpr'>, Omit<ViewProps, 'children'> {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
style?: ViewStyle;
|
|
7
|
+
}
|
|
8
|
+
export interface Props extends CanvasProps {
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A native canvas which accepts threejs elements as children.
|
|
12
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/canvas
|
|
13
|
+
*/
|
|
14
|
+
export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<View>>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type * as THREE from 'three';
|
|
2
|
+
import type { Args, EventHandlers, InstanceProps, ConstructorRepresentation } from "./core/index.js";
|
|
3
|
+
import type { Overwrite, Mutable } from "./core/utils.js";
|
|
4
|
+
export interface MathRepresentation {
|
|
5
|
+
set(...args: number[]): any;
|
|
6
|
+
}
|
|
7
|
+
export interface VectorRepresentation extends MathRepresentation {
|
|
8
|
+
setScalar(value: number): any;
|
|
9
|
+
}
|
|
10
|
+
export type MathTypes = MathRepresentation | THREE.Euler | THREE.Color;
|
|
11
|
+
export type MathType<T extends MathTypes> = T extends THREE.Color ? Args<typeof THREE.Color> | THREE.ColorRepresentation : T extends VectorRepresentation | THREE.Layers | THREE.Euler ? T | Parameters<T['set']> | number : T | Parameters<T['set']>;
|
|
12
|
+
export type MathProps<P> = {
|
|
13
|
+
[K in keyof P as P[K] extends MathTypes ? K : never]: P[K] extends MathTypes ? MathType<P[K]> : never;
|
|
14
|
+
};
|
|
15
|
+
export type Vector2 = MathType<THREE.Vector2>;
|
|
16
|
+
export type Vector3 = MathType<THREE.Vector3>;
|
|
17
|
+
export type Vector4 = MathType<THREE.Vector4>;
|
|
18
|
+
export type Color = MathType<THREE.Color>;
|
|
19
|
+
export type Layers = MathType<THREE.Layers>;
|
|
20
|
+
export type Quaternion = MathType<THREE.Quaternion>;
|
|
21
|
+
export type Euler = MathType<THREE.Euler>;
|
|
22
|
+
export type Matrix3 = MathType<THREE.Matrix3>;
|
|
23
|
+
export type Matrix4 = MathType<THREE.Matrix4>;
|
|
24
|
+
export interface RaycastableRepresentation {
|
|
25
|
+
raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
|
|
26
|
+
}
|
|
27
|
+
export type EventProps<P> = P extends RaycastableRepresentation ? Partial<EventHandlers> : {};
|
|
28
|
+
export interface ReactProps<P> {
|
|
29
|
+
children?: React.ReactNode;
|
|
30
|
+
ref?: React.Ref<P>;
|
|
31
|
+
key?: React.Key;
|
|
32
|
+
}
|
|
33
|
+
export type ElementProps<T extends ConstructorRepresentation, P = InstanceType<T>> = Partial<Overwrite<P, MathProps<P> & ReactProps<P> & EventProps<P>>>;
|
|
34
|
+
export type ThreeElement<T extends ConstructorRepresentation> = Mutable<Overwrite<ElementProps<T>, Omit<InstanceProps<InstanceType<T>, T>, 'object'>>>;
|
|
35
|
+
type ThreeExports = typeof THREE;
|
|
36
|
+
type ThreeElementsImpl = {
|
|
37
|
+
[K in keyof ThreeExports as Uncapitalize<K>]: ThreeExports[K] extends ConstructorRepresentation ? ThreeElement<ThreeExports[K]> : never;
|
|
38
|
+
};
|
|
39
|
+
export interface ThreeElements extends ThreeElementsImpl {
|
|
40
|
+
primitive: Omit<ThreeElement<any>, 'args'> & {
|
|
41
|
+
object: object;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
declare module 'react' {
|
|
45
|
+
namespace JSX {
|
|
46
|
+
interface IntrinsicElements extends ThreeElements {
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
declare module 'react/jsx-runtime' {
|
|
51
|
+
namespace JSX {
|
|
52
|
+
interface IntrinsicElements extends ThreeElements {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
declare module 'react/jsx-dev-runtime' {
|
|
57
|
+
namespace JSX {
|
|
58
|
+
interface IntrinsicElements extends ThreeElements {
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Options as ResizeOptions } from "./use-measure.js";
|
|
3
|
+
import { RenderProps } from "../core/index.js";
|
|
4
|
+
export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size'>, React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Canvas fallback content, similar to img's alt prop */
|
|
7
|
+
fallback?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Options to pass to useMeasure.
|
|
10
|
+
* @see https://github.com/pmndrs/react-use-measure#api
|
|
11
|
+
*/
|
|
12
|
+
resize?: ResizeOptions;
|
|
13
|
+
/** The target where events are being subscribed to, default: the div that wraps canvas */
|
|
14
|
+
eventSource?: HTMLElement | React.RefObject<HTMLElement>;
|
|
15
|
+
/** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
|
|
16
|
+
eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen';
|
|
17
|
+
}
|
|
18
|
+
export interface Props extends CanvasProps {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A DOM canvas which accepts threejs elements as children.
|
|
22
|
+
* @see https://docs.pmnd.rs/react-three-fiber/api/canvas
|
|
23
|
+
*/
|
|
24
|
+
export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<HTMLCanvasElement>>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare type ResizeObserverCallback = (entries: any[], observer: ResizeObserver) => void;
|
|
2
|
+
declare class ResizeObserver {
|
|
3
|
+
constructor(callback: ResizeObserverCallback);
|
|
4
|
+
observe(target: Element, options?: any): void;
|
|
5
|
+
unobserve(target: Element): void;
|
|
6
|
+
disconnect(): void;
|
|
7
|
+
static toString(): string;
|
|
8
|
+
}
|
|
9
|
+
export interface RectReadOnly {
|
|
10
|
+
readonly x: number;
|
|
11
|
+
readonly y: number;
|
|
12
|
+
readonly width: number;
|
|
13
|
+
readonly height: number;
|
|
14
|
+
readonly top: number;
|
|
15
|
+
readonly right: number;
|
|
16
|
+
readonly bottom: number;
|
|
17
|
+
readonly left: number;
|
|
18
|
+
[key: string]: number;
|
|
19
|
+
}
|
|
20
|
+
type HTMLOrSVGElement = HTMLElement | SVGElement;
|
|
21
|
+
type Result = [(element: HTMLOrSVGElement | null) => void, RectReadOnly, () => void];
|
|
22
|
+
export type Options = {
|
|
23
|
+
debounce?: number | {
|
|
24
|
+
scroll: number;
|
|
25
|
+
resize: number;
|
|
26
|
+
};
|
|
27
|
+
scroll?: boolean;
|
|
28
|
+
polyfill?: {
|
|
29
|
+
new (cb: ResizeObserverCallback): ResizeObserver;
|
|
30
|
+
};
|
|
31
|
+
offsetSize?: boolean;
|
|
32
|
+
};
|
|
33
|
+
export declare function useMeasure({ debounce, scroll, polyfill, offsetSize }?: Options): Result;
|
|
34
|
+
export {};
|
|
@@ -2,11 +2,11 @@ import * as THREE from 'three';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { NoEventPriority, DefaultEventPriority, ContinuousEventPriority, DiscreteEventPriority, ConcurrentRoot } from 'react-reconciler/constants';
|
|
4
4
|
import { createWithEqualityFn } from 'zustand/traditional';
|
|
5
|
+
import { suspend, preload, clear } from 'suspend-react';
|
|
6
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
5
7
|
import { useFiber, useContextBridge, traverseFiber } from 'its-fine';
|
|
6
8
|
import Reconciler from 'react-reconciler';
|
|
7
9
|
import { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';
|
|
8
|
-
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
9
|
-
import { suspend, preload, clear } from 'suspend-react';
|
|
10
10
|
|
|
11
11
|
var threeTypes = /*#__PURE__*/Object.freeze({
|
|
12
12
|
__proto__: null
|
|
@@ -289,8 +289,8 @@ function swapInstances() {
|
|
|
289
289
|
reconstructed.length = 0;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
// Don't handle text instances,
|
|
293
|
-
const handleTextInstance = () =>
|
|
292
|
+
// Don't handle text instances, make it no-op
|
|
293
|
+
const handleTextInstance = () => {};
|
|
294
294
|
const NO_CONTEXT = {};
|
|
295
295
|
let currentUpdatePriority = NoEventPriority;
|
|
296
296
|
|
|
@@ -2281,4 +2281,90 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
|
|
|
2281
2281
|
if (runGlobalEffects) flushGlobalEffects('after', timestamp);
|
|
2282
2282
|
}
|
|
2283
2283
|
|
|
2284
|
-
|
|
2284
|
+
const DOM_EVENTS = {
|
|
2285
|
+
onClick: ['click', false],
|
|
2286
|
+
onContextMenu: ['contextmenu', false],
|
|
2287
|
+
onDoubleClick: ['dblclick', false],
|
|
2288
|
+
onWheel: ['wheel', true],
|
|
2289
|
+
onPointerDown: ['pointerdown', true],
|
|
2290
|
+
onPointerUp: ['pointerup', true],
|
|
2291
|
+
onPointerLeave: ['pointerleave', true],
|
|
2292
|
+
onPointerMove: ['pointermove', true],
|
|
2293
|
+
onPointerCancel: ['pointercancel', true],
|
|
2294
|
+
onLostPointerCapture: ['lostpointercapture', true]
|
|
2295
|
+
};
|
|
2296
|
+
|
|
2297
|
+
/** Default R3F event manager for web */
|
|
2298
|
+
function createPointerEvents(store) {
|
|
2299
|
+
const {
|
|
2300
|
+
handlePointer
|
|
2301
|
+
} = createEvents(store);
|
|
2302
|
+
return {
|
|
2303
|
+
priority: 1,
|
|
2304
|
+
enabled: true,
|
|
2305
|
+
compute(event, state, previous) {
|
|
2306
|
+
// https://github.com/pmndrs/react-three-fiber/pull/782
|
|
2307
|
+
// Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
|
|
2308
|
+
state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
|
|
2309
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
2310
|
+
},
|
|
2311
|
+
connected: undefined,
|
|
2312
|
+
handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
|
|
2313
|
+
...acc,
|
|
2314
|
+
[key]: handlePointer(key)
|
|
2315
|
+
}), {}),
|
|
2316
|
+
update: () => {
|
|
2317
|
+
var _internal$lastEvent;
|
|
2318
|
+
const {
|
|
2319
|
+
events,
|
|
2320
|
+
internal
|
|
2321
|
+
} = store.getState();
|
|
2322
|
+
if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
|
|
2323
|
+
},
|
|
2324
|
+
connect: target => {
|
|
2325
|
+
const {
|
|
2326
|
+
set,
|
|
2327
|
+
events
|
|
2328
|
+
} = store.getState();
|
|
2329
|
+
events.disconnect == null ? void 0 : events.disconnect();
|
|
2330
|
+
set(state => ({
|
|
2331
|
+
events: {
|
|
2332
|
+
...state.events,
|
|
2333
|
+
connected: target
|
|
2334
|
+
}
|
|
2335
|
+
}));
|
|
2336
|
+
if (events.handlers) {
|
|
2337
|
+
for (const name in events.handlers) {
|
|
2338
|
+
const event = events.handlers[name];
|
|
2339
|
+
const [eventName, passive] = DOM_EVENTS[name];
|
|
2340
|
+
target.addEventListener(eventName, event, {
|
|
2341
|
+
passive
|
|
2342
|
+
});
|
|
2343
|
+
}
|
|
2344
|
+
}
|
|
2345
|
+
},
|
|
2346
|
+
disconnect: () => {
|
|
2347
|
+
const {
|
|
2348
|
+
set,
|
|
2349
|
+
events
|
|
2350
|
+
} = store.getState();
|
|
2351
|
+
if (events.connected) {
|
|
2352
|
+
if (events.handlers) {
|
|
2353
|
+
for (const name in events.handlers) {
|
|
2354
|
+
const event = events.handlers[name];
|
|
2355
|
+
const [eventName] = DOM_EVENTS[name];
|
|
2356
|
+
events.connected.removeEventListener(eventName, event);
|
|
2357
|
+
}
|
|
2358
|
+
}
|
|
2359
|
+
set(state => ({
|
|
2360
|
+
events: {
|
|
2361
|
+
...state.events,
|
|
2362
|
+
connected: undefined
|
|
2363
|
+
}
|
|
2364
|
+
}));
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2367
|
+
};
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
export { useStore as A, Block as B, useThree as C, useFrame as D, ErrorBoundary as E, useGraph as F, useLoader as G, _roots as _, useMutableCallback as a, useIsomorphicLayoutEffect as b, createRoot as c, unmountComponentAtNode as d, extend as e, createPointerEvents as f, createEvents as g, flushGlobalEffects as h, isRef as i, addEffect as j, addAfterEffect as k, addTail as l, invalidate as m, advance as n, render as o, createPortal as p, context as q, reconciler as r, applyProps as s, threeTypes as t, useBridge as u, getRootState as v, dispose as w, act as x, buildGraph as y, useInstanceHandle as z };
|
|
@@ -4,11 +4,11 @@ var THREE = require('three');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var constants = require('react-reconciler/constants');
|
|
6
6
|
var traditional = require('zustand/traditional');
|
|
7
|
+
var suspendReact = require('suspend-react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
9
|
var itsFine = require('its-fine');
|
|
8
10
|
var Reconciler = require('react-reconciler');
|
|
9
11
|
var scheduler = require('scheduler');
|
|
10
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
-
var suspendReact = require('suspend-react');
|
|
12
12
|
|
|
13
13
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
14
14
|
|
|
@@ -315,8 +315,8 @@ function swapInstances() {
|
|
|
315
315
|
reconstructed.length = 0;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
// Don't handle text instances,
|
|
319
|
-
const handleTextInstance = () =>
|
|
318
|
+
// Don't handle text instances, make it no-op
|
|
319
|
+
const handleTextInstance = () => {};
|
|
320
320
|
const NO_CONTEXT = {};
|
|
321
321
|
let currentUpdatePriority = constants.NoEventPriority;
|
|
322
322
|
|
|
@@ -2306,6 +2306,92 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
|
|
|
2306
2306
|
if (runGlobalEffects) flushGlobalEffects('after', timestamp);
|
|
2307
2307
|
}
|
|
2308
2308
|
|
|
2309
|
+
const DOM_EVENTS = {
|
|
2310
|
+
onClick: ['click', false],
|
|
2311
|
+
onContextMenu: ['contextmenu', false],
|
|
2312
|
+
onDoubleClick: ['dblclick', false],
|
|
2313
|
+
onWheel: ['wheel', true],
|
|
2314
|
+
onPointerDown: ['pointerdown', true],
|
|
2315
|
+
onPointerUp: ['pointerup', true],
|
|
2316
|
+
onPointerLeave: ['pointerleave', true],
|
|
2317
|
+
onPointerMove: ['pointermove', true],
|
|
2318
|
+
onPointerCancel: ['pointercancel', true],
|
|
2319
|
+
onLostPointerCapture: ['lostpointercapture', true]
|
|
2320
|
+
};
|
|
2321
|
+
|
|
2322
|
+
/** Default R3F event manager for web */
|
|
2323
|
+
function createPointerEvents(store) {
|
|
2324
|
+
const {
|
|
2325
|
+
handlePointer
|
|
2326
|
+
} = createEvents(store);
|
|
2327
|
+
return {
|
|
2328
|
+
priority: 1,
|
|
2329
|
+
enabled: true,
|
|
2330
|
+
compute(event, state, previous) {
|
|
2331
|
+
// https://github.com/pmndrs/react-three-fiber/pull/782
|
|
2332
|
+
// Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
|
|
2333
|
+
state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
|
|
2334
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
2335
|
+
},
|
|
2336
|
+
connected: undefined,
|
|
2337
|
+
handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
|
|
2338
|
+
...acc,
|
|
2339
|
+
[key]: handlePointer(key)
|
|
2340
|
+
}), {}),
|
|
2341
|
+
update: () => {
|
|
2342
|
+
var _internal$lastEvent;
|
|
2343
|
+
const {
|
|
2344
|
+
events,
|
|
2345
|
+
internal
|
|
2346
|
+
} = store.getState();
|
|
2347
|
+
if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
|
|
2348
|
+
},
|
|
2349
|
+
connect: target => {
|
|
2350
|
+
const {
|
|
2351
|
+
set,
|
|
2352
|
+
events
|
|
2353
|
+
} = store.getState();
|
|
2354
|
+
events.disconnect == null ? void 0 : events.disconnect();
|
|
2355
|
+
set(state => ({
|
|
2356
|
+
events: {
|
|
2357
|
+
...state.events,
|
|
2358
|
+
connected: target
|
|
2359
|
+
}
|
|
2360
|
+
}));
|
|
2361
|
+
if (events.handlers) {
|
|
2362
|
+
for (const name in events.handlers) {
|
|
2363
|
+
const event = events.handlers[name];
|
|
2364
|
+
const [eventName, passive] = DOM_EVENTS[name];
|
|
2365
|
+
target.addEventListener(eventName, event, {
|
|
2366
|
+
passive
|
|
2367
|
+
});
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
},
|
|
2371
|
+
disconnect: () => {
|
|
2372
|
+
const {
|
|
2373
|
+
set,
|
|
2374
|
+
events
|
|
2375
|
+
} = store.getState();
|
|
2376
|
+
if (events.connected) {
|
|
2377
|
+
if (events.handlers) {
|
|
2378
|
+
for (const name in events.handlers) {
|
|
2379
|
+
const event = events.handlers[name];
|
|
2380
|
+
const [eventName] = DOM_EVENTS[name];
|
|
2381
|
+
events.connected.removeEventListener(eventName, event);
|
|
2382
|
+
}
|
|
2383
|
+
}
|
|
2384
|
+
set(state => ({
|
|
2385
|
+
events: {
|
|
2386
|
+
...state.events,
|
|
2387
|
+
connected: undefined
|
|
2388
|
+
}
|
|
2389
|
+
}));
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2392
|
+
};
|
|
2393
|
+
}
|
|
2394
|
+
|
|
2309
2395
|
exports.Block = Block;
|
|
2310
2396
|
exports.ErrorBoundary = ErrorBoundary;
|
|
2311
2397
|
exports._roots = _roots;
|
|
@@ -2318,6 +2404,7 @@ exports.applyProps = applyProps;
|
|
|
2318
2404
|
exports.buildGraph = buildGraph;
|
|
2319
2405
|
exports.context = context;
|
|
2320
2406
|
exports.createEvents = createEvents;
|
|
2407
|
+
exports.createPointerEvents = createPointerEvents;
|
|
2321
2408
|
exports.createPortal = createPortal;
|
|
2322
2409
|
exports.createRoot = createRoot;
|
|
2323
2410
|
exports.dispose = dispose;
|
|
@@ -4,11 +4,11 @@ var THREE = require('three');
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var constants = require('react-reconciler/constants');
|
|
6
6
|
var traditional = require('zustand/traditional');
|
|
7
|
+
var suspendReact = require('suspend-react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
9
|
var itsFine = require('its-fine');
|
|
8
10
|
var Reconciler = require('react-reconciler');
|
|
9
11
|
var scheduler = require('scheduler');
|
|
10
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
-
var suspendReact = require('suspend-react');
|
|
12
12
|
|
|
13
13
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
14
14
|
|
|
@@ -315,8 +315,8 @@ function swapInstances() {
|
|
|
315
315
|
reconstructed.length = 0;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
// Don't handle text instances,
|
|
319
|
-
const handleTextInstance = () =>
|
|
318
|
+
// Don't handle text instances, make it no-op
|
|
319
|
+
const handleTextInstance = () => {};
|
|
320
320
|
const NO_CONTEXT = {};
|
|
321
321
|
let currentUpdatePriority = constants.NoEventPriority;
|
|
322
322
|
|
|
@@ -2307,6 +2307,92 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
|
|
|
2307
2307
|
if (runGlobalEffects) flushGlobalEffects('after', timestamp);
|
|
2308
2308
|
}
|
|
2309
2309
|
|
|
2310
|
+
const DOM_EVENTS = {
|
|
2311
|
+
onClick: ['click', false],
|
|
2312
|
+
onContextMenu: ['contextmenu', false],
|
|
2313
|
+
onDoubleClick: ['dblclick', false],
|
|
2314
|
+
onWheel: ['wheel', true],
|
|
2315
|
+
onPointerDown: ['pointerdown', true],
|
|
2316
|
+
onPointerUp: ['pointerup', true],
|
|
2317
|
+
onPointerLeave: ['pointerleave', true],
|
|
2318
|
+
onPointerMove: ['pointermove', true],
|
|
2319
|
+
onPointerCancel: ['pointercancel', true],
|
|
2320
|
+
onLostPointerCapture: ['lostpointercapture', true]
|
|
2321
|
+
};
|
|
2322
|
+
|
|
2323
|
+
/** Default R3F event manager for web */
|
|
2324
|
+
function createPointerEvents(store) {
|
|
2325
|
+
const {
|
|
2326
|
+
handlePointer
|
|
2327
|
+
} = createEvents(store);
|
|
2328
|
+
return {
|
|
2329
|
+
priority: 1,
|
|
2330
|
+
enabled: true,
|
|
2331
|
+
compute(event, state, previous) {
|
|
2332
|
+
// https://github.com/pmndrs/react-three-fiber/pull/782
|
|
2333
|
+
// Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
|
|
2334
|
+
state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
|
|
2335
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
2336
|
+
},
|
|
2337
|
+
connected: undefined,
|
|
2338
|
+
handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
|
|
2339
|
+
...acc,
|
|
2340
|
+
[key]: handlePointer(key)
|
|
2341
|
+
}), {}),
|
|
2342
|
+
update: () => {
|
|
2343
|
+
var _internal$lastEvent;
|
|
2344
|
+
const {
|
|
2345
|
+
events,
|
|
2346
|
+
internal
|
|
2347
|
+
} = store.getState();
|
|
2348
|
+
if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
|
|
2349
|
+
},
|
|
2350
|
+
connect: target => {
|
|
2351
|
+
const {
|
|
2352
|
+
set,
|
|
2353
|
+
events
|
|
2354
|
+
} = store.getState();
|
|
2355
|
+
events.disconnect == null ? void 0 : events.disconnect();
|
|
2356
|
+
set(state => ({
|
|
2357
|
+
events: {
|
|
2358
|
+
...state.events,
|
|
2359
|
+
connected: target
|
|
2360
|
+
}
|
|
2361
|
+
}));
|
|
2362
|
+
if (events.handlers) {
|
|
2363
|
+
for (const name in events.handlers) {
|
|
2364
|
+
const event = events.handlers[name];
|
|
2365
|
+
const [eventName, passive] = DOM_EVENTS[name];
|
|
2366
|
+
target.addEventListener(eventName, event, {
|
|
2367
|
+
passive
|
|
2368
|
+
});
|
|
2369
|
+
}
|
|
2370
|
+
}
|
|
2371
|
+
},
|
|
2372
|
+
disconnect: () => {
|
|
2373
|
+
const {
|
|
2374
|
+
set,
|
|
2375
|
+
events
|
|
2376
|
+
} = store.getState();
|
|
2377
|
+
if (events.connected) {
|
|
2378
|
+
if (events.handlers) {
|
|
2379
|
+
for (const name in events.handlers) {
|
|
2380
|
+
const event = events.handlers[name];
|
|
2381
|
+
const [eventName] = DOM_EVENTS[name];
|
|
2382
|
+
events.connected.removeEventListener(eventName, event);
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
set(state => ({
|
|
2386
|
+
events: {
|
|
2387
|
+
...state.events,
|
|
2388
|
+
connected: undefined
|
|
2389
|
+
}
|
|
2390
|
+
}));
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
};
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2310
2396
|
exports.Block = Block;
|
|
2311
2397
|
exports.ErrorBoundary = ErrorBoundary;
|
|
2312
2398
|
exports._roots = _roots;
|
|
@@ -2319,6 +2405,7 @@ exports.applyProps = applyProps;
|
|
|
2319
2405
|
exports.buildGraph = buildGraph;
|
|
2320
2406
|
exports.context = context;
|
|
2321
2407
|
exports.createEvents = createEvents;
|
|
2408
|
+
exports.createPointerEvents = createPointerEvents;
|
|
2322
2409
|
exports.createPortal = createPortal;
|
|
2323
2410
|
exports.createRoot = createRoot;
|
|
2324
2411
|
exports.dispose = dispose;
|