@react-three/fiber 8.0.0-beta-03 → 8.0.0-beta-04
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/dist/declarations/src/core/events.d.ts +1 -0
- package/dist/declarations/src/{web → core}/index.d.ts +2 -4
- package/dist/declarations/src/index.d.ts +3 -1
- package/dist/declarations/src/native/Canvas.d.ts +2 -5
- package/dist/declarations/src/native/events.d.ts +0 -1
- package/dist/declarations/src/native.d.ts +3 -1
- package/dist/declarations/src/web/Canvas.d.ts +1 -1
- package/dist/declarations/src/web/events.d.ts +0 -1
- package/dist/{hooks-7b7e01e6.cjs.prod.js → index-eb414398.cjs.prod.js} +276 -60
- package/dist/{hooks-15c12e3e.esm.js → index-fccd77b0.esm.js} +265 -54
- package/dist/{hooks-6526f63c.cjs.dev.js → index-ff3eb68b.cjs.dev.js} +276 -60
- package/dist/react-three-fiber.cjs.dev.js +53 -274
- package/dist/react-three-fiber.cjs.prod.js +53 -274
- package/dist/react-three-fiber.esm.js +29 -250
- package/native/dist/react-three-fiber-native.cjs.dev.js +135 -336
- package/native/dist/react-three-fiber-native.cjs.prod.js +135 -336
- package/native/dist/react-three-fiber-native.esm.js +110 -311
- package/package.json +2 -1
- package/dist/declarations/src/native/index.d.ts +0 -36
|
@@ -57,6 +57,7 @@ export interface PointerCaptureTarget {
|
|
|
57
57
|
intersection: Intersection;
|
|
58
58
|
target: Element;
|
|
59
59
|
}
|
|
60
|
+
export declare function getEventPriority(): any;
|
|
60
61
|
export declare function removeInteractivity(store: UseStore<RootState>, object: THREE.Object3D): void;
|
|
61
62
|
export declare function createEvents(store: UseStore<RootState>): {
|
|
62
63
|
handlePointer: (name: string) => (event: DomEvent) => void;
|
|
@@ -6,8 +6,7 @@ import { dispose } from '../core/utils';
|
|
|
6
6
|
import { Renderer, StoreProps, context, RootState, Size } from '../core/store';
|
|
7
7
|
import { extend, Root } from '../core/renderer';
|
|
8
8
|
import { addEffect, addAfterEffect, addTail } from '../core/loop';
|
|
9
|
-
import {
|
|
10
|
-
import { EventManager } from '../core/events';
|
|
9
|
+
import { EventManager } from './events';
|
|
11
10
|
declare const roots: Map<Element, Root>;
|
|
12
11
|
declare const invalidate: (state?: RootState | undefined) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState | undefined) => void;
|
|
13
12
|
declare const reconciler: import("react-reconciler").Reconciler<unknown, unknown, unknown, unknown, unknown>, applyProps: typeof import("../core/utils").applyProps;
|
|
@@ -29,5 +28,4 @@ declare function render<TCanvas extends Element>(element: React.ReactNode, canva
|
|
|
29
28
|
declare function unmountComponentAtNode<TElement extends Element>(canvas: TElement, callback?: (canvas: TElement) => void): void;
|
|
30
29
|
declare const act: any;
|
|
31
30
|
declare function createPortal(children: React.ReactNode, container: THREE.Object3D): React.ReactNode;
|
|
32
|
-
export
|
|
33
|
-
export { context, render, createRoot, unmountComponentAtNode, createPortal, events, reconciler, applyProps, dispose, invalidate, advance, extend, addEffect, addAfterEffect, addTail, act, roots as _roots, };
|
|
31
|
+
export { context, render, createRoot, unmountComponentAtNode, createPortal, reconciler, applyProps, dispose, invalidate, advance, extend, addEffect, addAfterEffect, addTail, act, roots as _roots, };
|
|
@@ -4,5 +4,7 @@ export { ReactThreeFiber };
|
|
|
4
4
|
export type { Intersection, Subscription, Dpr, Size, Viewport, Camera, RenderCallback, Performance, RootState, } from './core/store';
|
|
5
5
|
export type { ThreeEvent, Events, EventManager } from './core/events';
|
|
6
6
|
export type { ObjectMap } from './core/utils';
|
|
7
|
+
export * from './core/hooks';
|
|
7
8
|
export * from './web/Canvas';
|
|
8
|
-
export
|
|
9
|
+
export { createPointerEvents as events } from './web/events';
|
|
10
|
+
export * from './core';
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { View, ViewProps, ViewStyle } from 'react-native';
|
|
3
|
-
import { ExpoWebGLRenderingContext } from 'expo-gl';
|
|
4
3
|
import { UseStore } from 'zustand';
|
|
5
|
-
import { RenderProps } from '
|
|
4
|
+
import { RenderProps } from '../core';
|
|
6
5
|
import { RootState } from '../core/store';
|
|
7
6
|
import { EventManager } from '../core/events';
|
|
8
|
-
export interface Props extends Omit<RenderProps<
|
|
7
|
+
export interface Props extends Omit<RenderProps<HTMLCanvasElement>, 'size' | 'events'>, ViewProps {
|
|
9
8
|
children: React.ReactNode;
|
|
10
9
|
fallback?: React.ReactNode;
|
|
11
10
|
style?: ViewStyle;
|
|
12
11
|
events?: (store: UseStore<RootState>) => EventManager<any>;
|
|
13
|
-
nativeRef_EXPERIMENTAL?: React.MutableRefObject<any>;
|
|
14
|
-
onContextCreate?: (gl: ExpoWebGLRenderingContext) => Promise<any> | void;
|
|
15
12
|
}
|
|
16
13
|
export declare const Canvas: React.ForwardRefExoticComponent<Props & React.RefAttributes<View>>;
|
|
@@ -2,5 +2,4 @@ import { UseStore } from 'zustand';
|
|
|
2
2
|
import { RootState } from '../core/store';
|
|
3
3
|
import { EventManager } from '../core/events';
|
|
4
4
|
import { View } from 'react-native';
|
|
5
|
-
export declare function getEventPriority(): any;
|
|
6
5
|
export declare function createTouchEvents(store: UseStore<RootState>): EventManager<View>;
|
|
@@ -4,5 +4,7 @@ export { ReactThreeFiber };
|
|
|
4
4
|
export type { Intersection, Subscription, Dpr, Size, Viewport, Camera, RenderCallback, Performance, RootState, } from './core/store';
|
|
5
5
|
export type { ThreeEvent, Events, EventManager } from './core/events';
|
|
6
6
|
export type { ObjectMap } from './core/utils';
|
|
7
|
+
export * from './native/hooks';
|
|
7
8
|
export * from './native/Canvas';
|
|
8
|
-
export
|
|
9
|
+
export { createTouchEvents as events } from './native/events';
|
|
10
|
+
export * from './core';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { Options as ResizeOptions } from 'react-use-measure';
|
|
3
3
|
import { UseStore } from 'zustand';
|
|
4
|
-
import { RenderProps } from '
|
|
4
|
+
import { RenderProps } from '../core';
|
|
5
5
|
import { RootState } from '../core/store';
|
|
6
6
|
import { EventManager } from '../core/events';
|
|
7
7
|
export interface Props extends Omit<RenderProps<HTMLCanvasElement>, 'size' | 'events'>, React.HTMLAttributes<HTMLDivElement> {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { UseStore } from 'zustand';
|
|
2
2
|
import { RootState } from '../core/store';
|
|
3
3
|
import { EventManager } from '../core/events';
|
|
4
|
-
export declare function getEventPriority(): any;
|
|
5
4
|
export declare function createPointerEvents(store: UseStore<RootState>): EventManager<HTMLElement>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Reconciler = require('react-reconciler');
|
|
4
|
-
var scheduler = require('scheduler');
|
|
5
|
-
var constants = require('react-reconciler/constants');
|
|
6
|
-
var THREE = require('three');
|
|
7
3
|
var React = require('react');
|
|
8
4
|
var suspendReact = require('suspend-react');
|
|
5
|
+
var THREE = require('three');
|
|
6
|
+
var constants = require('react-reconciler/constants');
|
|
9
7
|
var create = require('zustand');
|
|
8
|
+
var Reconciler = require('react-reconciler');
|
|
9
|
+
var scheduler = require('scheduler');
|
|
10
10
|
|
|
11
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
12
12
|
|
|
@@ -30,10 +30,10 @@ function _interopNamespace(e) {
|
|
|
30
30
|
return Object.freeze(n);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
var Reconciler__default = /*#__PURE__*/_interopDefault(Reconciler);
|
|
34
|
-
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
35
33
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
34
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
36
35
|
var create__default = /*#__PURE__*/_interopDefault(create);
|
|
36
|
+
var Reconciler__default = /*#__PURE__*/_interopDefault(Reconciler);
|
|
37
37
|
|
|
38
38
|
var threeTypes = /*#__PURE__*/Object.freeze({
|
|
39
39
|
__proto__: null
|
|
@@ -241,7 +241,7 @@ function diffProps(instance, {
|
|
|
241
241
|
};
|
|
242
242
|
} // This function applies a set of changes to the instance
|
|
243
243
|
|
|
244
|
-
function applyProps(instance, data) {
|
|
244
|
+
function applyProps$1(instance, data) {
|
|
245
245
|
var _instance$__r3f3, _root$getState;
|
|
246
246
|
|
|
247
247
|
// Filter equals, events and reserved props
|
|
@@ -351,13 +351,41 @@ function updateInstance(instance) {
|
|
|
351
351
|
|
|
352
352
|
function makeId(event) {
|
|
353
353
|
return (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;
|
|
354
|
+
} // https://github.com/facebook/react/tree/main/packages/react-reconciler#getcurrenteventpriority
|
|
355
|
+
// Gives React a clue as to how import the current interaction is
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
function getEventPriority() {
|
|
359
|
+
var _window, _window$event;
|
|
360
|
+
|
|
361
|
+
let name = (_window = window) == null ? void 0 : (_window$event = _window.event) == null ? void 0 : _window$event.type;
|
|
362
|
+
|
|
363
|
+
switch (name) {
|
|
364
|
+
case 'click':
|
|
365
|
+
case 'contextmenu':
|
|
366
|
+
case 'dblclick':
|
|
367
|
+
case 'pointercancel':
|
|
368
|
+
case 'pointerdown':
|
|
369
|
+
case 'pointerup':
|
|
370
|
+
return constants.DiscreteEventPriority;
|
|
371
|
+
|
|
372
|
+
case 'pointermove':
|
|
373
|
+
case 'pointerout':
|
|
374
|
+
case 'pointerover':
|
|
375
|
+
case 'pointerenter':
|
|
376
|
+
case 'pointerleave':
|
|
377
|
+
case 'wheel':
|
|
378
|
+
return constants.ContinuousEventPriority;
|
|
379
|
+
|
|
380
|
+
default:
|
|
381
|
+
return constants.DefaultEventPriority;
|
|
382
|
+
}
|
|
354
383
|
}
|
|
355
384
|
/**
|
|
356
385
|
* Release pointer captures.
|
|
357
386
|
* This is called by releasePointerCapture in the API, and when an object is removed.
|
|
358
387
|
*/
|
|
359
388
|
|
|
360
|
-
|
|
361
389
|
function releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {
|
|
362
390
|
const captureData = captures.get(obj);
|
|
363
391
|
|
|
@@ -829,7 +857,7 @@ function createRenderer(roots, getEventPriority) {
|
|
|
829
857
|
// why it passes "true" here
|
|
830
858
|
|
|
831
859
|
|
|
832
|
-
applyProps(instance, props);
|
|
860
|
+
applyProps$1(instance, props);
|
|
833
861
|
return instance;
|
|
834
862
|
}
|
|
835
863
|
|
|
@@ -1027,7 +1055,7 @@ function createRenderer(roots, getEventPriority) {
|
|
|
1027
1055
|
commitUpdate(instance, [reconstruct, diff], type, oldProps, newProps, fiber) {
|
|
1028
1056
|
// Reconstruct when args or <primitive object={...} have changes
|
|
1029
1057
|
if (reconstruct) switchInstance(instance, type, newProps, fiber); // Otherwise just overwrite props
|
|
1030
|
-
else applyProps(instance, diff);
|
|
1058
|
+
else applyProps$1(instance, diff);
|
|
1031
1059
|
},
|
|
1032
1060
|
|
|
1033
1061
|
hideInstance(instance) {
|
|
@@ -1116,7 +1144,7 @@ function createRenderer(roots, getEventPriority) {
|
|
|
1116
1144
|
});
|
|
1117
1145
|
return {
|
|
1118
1146
|
reconciler,
|
|
1119
|
-
applyProps
|
|
1147
|
+
applyProps: applyProps$1
|
|
1120
1148
|
};
|
|
1121
1149
|
}
|
|
1122
1150
|
|
|
@@ -1418,6 +1446,60 @@ const createStore = (applyProps, invalidate, advance, props) => {
|
|
|
1418
1446
|
return rootState;
|
|
1419
1447
|
};
|
|
1420
1448
|
|
|
1449
|
+
function useStore() {
|
|
1450
|
+
const store = React__namespace.useContext(context);
|
|
1451
|
+
if (!store) throw `R3F hooks can only be used within the Canvas component!`;
|
|
1452
|
+
return store;
|
|
1453
|
+
}
|
|
1454
|
+
function useThree(selector = state => state, equalityFn) {
|
|
1455
|
+
return useStore()(selector, equalityFn);
|
|
1456
|
+
}
|
|
1457
|
+
function useFrame(callback, renderPriority = 0) {
|
|
1458
|
+
const subscribe = useStore().getState().internal.subscribe; // Update ref
|
|
1459
|
+
|
|
1460
|
+
const ref = React__namespace.useRef(callback);
|
|
1461
|
+
React__namespace.useLayoutEffect(() => void (ref.current = callback), [callback]); // Subscribe on mount, unsubscribe on unmount
|
|
1462
|
+
|
|
1463
|
+
React__namespace.useLayoutEffect(() => subscribe(ref, renderPriority), [renderPriority, subscribe]);
|
|
1464
|
+
return null;
|
|
1465
|
+
}
|
|
1466
|
+
function useGraph(object) {
|
|
1467
|
+
return React__namespace.useMemo(() => buildGraph(object), [object]);
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
function loadingFn(extensions, onProgress) {
|
|
1471
|
+
return function (Proto, ...input) {
|
|
1472
|
+
// Construct new loader and run extensions
|
|
1473
|
+
const loader = new Proto();
|
|
1474
|
+
if (extensions) extensions(loader); // Go through the urls and load them
|
|
1475
|
+
|
|
1476
|
+
return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {
|
|
1477
|
+
if (data.scene) Object.assign(data, buildGraph(data.scene));
|
|
1478
|
+
res(data);
|
|
1479
|
+
}, onProgress, error => reject(`Could not load ${input}: ${error.message}`)))));
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
function useLoader(Proto, input, extensions, onProgress) {
|
|
1484
|
+
// Use suspense to load async assets
|
|
1485
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1486
|
+
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
1487
|
+
equal: is.equ
|
|
1488
|
+
}); // Return the object/s
|
|
1489
|
+
|
|
1490
|
+
return Array.isArray(input) ? results : results[0];
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
useLoader.preload = function (Proto, input, extensions) {
|
|
1494
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1495
|
+
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
1496
|
+
};
|
|
1497
|
+
|
|
1498
|
+
useLoader.clear = function (Proto, input) {
|
|
1499
|
+
const keys = Array.isArray(input) ? input : [input];
|
|
1500
|
+
return suspendReact.clear([Proto, ...keys]);
|
|
1501
|
+
};
|
|
1502
|
+
|
|
1421
1503
|
function createSubs(callback, subs) {
|
|
1422
1504
|
const index = subs.length;
|
|
1423
1505
|
subs.push(callback);
|
|
@@ -1436,7 +1518,7 @@ function run(effects, timestamp) {
|
|
|
1436
1518
|
for (i = 0; i < effects.length; i++) effects[i](timestamp);
|
|
1437
1519
|
}
|
|
1438
1520
|
|
|
1439
|
-
function render(timestamp, state) {
|
|
1521
|
+
function render$1(timestamp, state) {
|
|
1440
1522
|
// Run local effects
|
|
1441
1523
|
let delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
|
|
1442
1524
|
|
|
@@ -1472,7 +1554,7 @@ function createLoop(roots) {
|
|
|
1472
1554
|
const state = root.store.getState(); // If the frameloop is invalidated, do not run another frame
|
|
1473
1555
|
|
|
1474
1556
|
if (state.internal.active && (state.frameloop === 'always' || state.internal.frames > 0) && !((_state$gl$xr = state.gl.xr) != null && _state$gl$xr.isPresenting)) {
|
|
1475
|
-
repeat += render(timestamp, state);
|
|
1557
|
+
repeat += render$1(timestamp, state);
|
|
1476
1558
|
}
|
|
1477
1559
|
}); // Run after-effects
|
|
1478
1560
|
|
|
@@ -1500,7 +1582,7 @@ function createLoop(roots) {
|
|
|
1500
1582
|
|
|
1501
1583
|
function advance(timestamp, runGlobalEffects = true, state) {
|
|
1502
1584
|
if (runGlobalEffects) run(globalEffects, timestamp);
|
|
1503
|
-
if (!state) roots.forEach(root => render(timestamp, root.store.getState()));else render(timestamp, state);
|
|
1585
|
+
if (!state) roots.forEach(root => render$1(timestamp, root.store.getState()));else render$1(timestamp, state);
|
|
1504
1586
|
if (runGlobalEffects) run(globalAfterEffects, timestamp);
|
|
1505
1587
|
}
|
|
1506
1588
|
|
|
@@ -1511,77 +1593,211 @@ function createLoop(roots) {
|
|
|
1511
1593
|
};
|
|
1512
1594
|
}
|
|
1513
1595
|
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
}
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1596
|
+
const roots = new Map();
|
|
1597
|
+
const {
|
|
1598
|
+
invalidate,
|
|
1599
|
+
advance
|
|
1600
|
+
} = createLoop(roots);
|
|
1601
|
+
const {
|
|
1602
|
+
reconciler,
|
|
1603
|
+
applyProps
|
|
1604
|
+
} = createRenderer(roots, getEventPriority);
|
|
1605
|
+
|
|
1606
|
+
const createRendererInstance = (gl, canvas) => {
|
|
1607
|
+
const customRenderer = typeof gl === 'function' ? gl(canvas) : gl;
|
|
1608
|
+
if (isRenderer(customRenderer)) return customRenderer;
|
|
1609
|
+
const renderer = new THREE__namespace.WebGLRenderer({
|
|
1610
|
+
powerPreference: 'high-performance',
|
|
1611
|
+
canvas: canvas,
|
|
1612
|
+
antialias: true,
|
|
1613
|
+
alpha: true,
|
|
1614
|
+
...gl
|
|
1615
|
+
}); // Set color management
|
|
1616
|
+
|
|
1617
|
+
renderer.outputEncoding = THREE__namespace.sRGBEncoding;
|
|
1618
|
+
renderer.toneMapping = THREE__namespace.ACESFilmicToneMapping; // Set gl props
|
|
1619
|
+
|
|
1620
|
+
if (gl) applyProps(renderer, gl);
|
|
1621
|
+
return renderer;
|
|
1622
|
+
};
|
|
1524
1623
|
|
|
1525
|
-
|
|
1526
|
-
|
|
1624
|
+
function createRoot(canvas, config) {
|
|
1625
|
+
return {
|
|
1626
|
+
render: element => {
|
|
1627
|
+
var _store;
|
|
1628
|
+
|
|
1629
|
+
let {
|
|
1630
|
+
gl,
|
|
1631
|
+
size,
|
|
1632
|
+
events,
|
|
1633
|
+
onCreated,
|
|
1634
|
+
...props
|
|
1635
|
+
} = config || {}; // Allow size to take on container bounds initially
|
|
1636
|
+
|
|
1637
|
+
if (!size) {
|
|
1638
|
+
var _canvas$parentElement, _canvas$parentElement2, _canvas$parentElement3, _canvas$parentElement4;
|
|
1639
|
+
|
|
1640
|
+
size = {
|
|
1641
|
+
width: (_canvas$parentElement = (_canvas$parentElement2 = canvas.parentElement) == null ? void 0 : _canvas$parentElement2.clientWidth) != null ? _canvas$parentElement : 0,
|
|
1642
|
+
height: (_canvas$parentElement3 = (_canvas$parentElement4 = canvas.parentElement) == null ? void 0 : _canvas$parentElement4.clientHeight) != null ? _canvas$parentElement3 : 0
|
|
1643
|
+
};
|
|
1644
|
+
}
|
|
1527
1645
|
|
|
1528
|
-
|
|
1529
|
-
|
|
1646
|
+
let root = roots.get(canvas);
|
|
1647
|
+
let fiber = root == null ? void 0 : root.fiber;
|
|
1648
|
+
let store = root == null ? void 0 : root.store;
|
|
1649
|
+
let state = (_store = store) == null ? void 0 : _store.getState();
|
|
1650
|
+
|
|
1651
|
+
if (fiber && state) {
|
|
1652
|
+
// When a root was found, see if any fundamental props must be changed or exchanged
|
|
1653
|
+
// Check pixelratio
|
|
1654
|
+
if (props.dpr !== undefined && state.viewport.dpr !== calculateDpr(props.dpr)) state.setDpr(props.dpr); // Check size
|
|
1655
|
+
|
|
1656
|
+
if (state.size.width !== size.width || state.size.height !== size.height) state.setSize(size.width, size.height); // Check frameloop
|
|
1657
|
+
|
|
1658
|
+
if (state.frameloop !== props.frameloop) state.setFrameloop(props.frameloop); // For some props we want to reset the entire root
|
|
1659
|
+
// Changes to the color-space
|
|
1660
|
+
|
|
1661
|
+
const linearChanged = props.linear !== state.internal.lastProps.linear;
|
|
1662
|
+
|
|
1663
|
+
if (linearChanged) {
|
|
1664
|
+
unmountComponentAtNode(canvas);
|
|
1665
|
+
fiber = undefined;
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
if (!fiber) {
|
|
1670
|
+
// If no root has been found, make one
|
|
1671
|
+
// Create gl
|
|
1672
|
+
const glRenderer = createRendererInstance(gl, canvas); // Create store
|
|
1673
|
+
|
|
1674
|
+
store = createStore(applyProps, invalidate, advance, {
|
|
1675
|
+
gl: glRenderer,
|
|
1676
|
+
size,
|
|
1677
|
+
...props
|
|
1678
|
+
});
|
|
1679
|
+
const state = store.getState(); // Create renderer
|
|
1680
|
+
|
|
1681
|
+
fiber = reconciler.createContainer(store, constants.ConcurrentRoot, false, null); // Map it
|
|
1682
|
+
|
|
1683
|
+
roots.set(canvas, {
|
|
1684
|
+
fiber,
|
|
1685
|
+
store
|
|
1686
|
+
}); // Store events internally
|
|
1687
|
+
|
|
1688
|
+
if (events) state.set({
|
|
1689
|
+
events: events(store)
|
|
1690
|
+
});
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
if (store && fiber) {
|
|
1694
|
+
reconciler.updateContainer( /*#__PURE__*/React__namespace.createElement(Provider, {
|
|
1695
|
+
store: store,
|
|
1696
|
+
element: element,
|
|
1697
|
+
onCreated: onCreated,
|
|
1698
|
+
target: canvas
|
|
1699
|
+
}), fiber, null, () => undefined);
|
|
1700
|
+
return store;
|
|
1701
|
+
} else {
|
|
1702
|
+
throw 'Error creating root!';
|
|
1703
|
+
}
|
|
1704
|
+
},
|
|
1705
|
+
unmount: () => unmountComponentAtNode(canvas)
|
|
1706
|
+
};
|
|
1530
1707
|
}
|
|
1531
|
-
|
|
1532
|
-
|
|
1708
|
+
|
|
1709
|
+
function render(element, canvas, config = {}) {
|
|
1710
|
+
console.warn('R3F.render is no longer supported in React 18. Use createRoot instead!');
|
|
1711
|
+
return createRoot(canvas, config).render(element);
|
|
1533
1712
|
}
|
|
1534
1713
|
|
|
1535
|
-
function
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1714
|
+
function Provider({
|
|
1715
|
+
store,
|
|
1716
|
+
element,
|
|
1717
|
+
onCreated,
|
|
1718
|
+
target
|
|
1719
|
+
}) {
|
|
1720
|
+
React__namespace.useEffect(() => {
|
|
1721
|
+
const state = store.getState(); // Flag the canvas active, rendering will now begin
|
|
1722
|
+
|
|
1723
|
+
state.set(state => ({
|
|
1724
|
+
internal: { ...state.internal,
|
|
1725
|
+
active: true
|
|
1726
|
+
}
|
|
1727
|
+
})); // Connect events
|
|
1540
1728
|
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1729
|
+
state.events.connect == null ? void 0 : state.events.connect(target); // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered
|
|
1730
|
+
|
|
1731
|
+
if (onCreated) onCreated(state); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1732
|
+
}, []);
|
|
1733
|
+
return /*#__PURE__*/React__namespace.createElement(context.Provider, {
|
|
1734
|
+
value: store
|
|
1735
|
+
}, element);
|
|
1546
1736
|
}
|
|
1547
1737
|
|
|
1548
|
-
function
|
|
1549
|
-
|
|
1550
|
-
const
|
|
1551
|
-
const results = suspendReact.suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {
|
|
1552
|
-
equal: is.equ
|
|
1553
|
-
}); // Return the object/s
|
|
1738
|
+
function unmountComponentAtNode(canvas, callback) {
|
|
1739
|
+
const root = roots.get(canvas);
|
|
1740
|
+
const fiber = root == null ? void 0 : root.fiber;
|
|
1554
1741
|
|
|
1555
|
-
|
|
1742
|
+
if (fiber) {
|
|
1743
|
+
const state = root == null ? void 0 : root.store.getState();
|
|
1744
|
+
if (state) state.internal.active = false;
|
|
1745
|
+
reconciler.updateContainer(null, fiber, null, () => {
|
|
1746
|
+
if (state) {
|
|
1747
|
+
setTimeout(() => {
|
|
1748
|
+
try {
|
|
1749
|
+
var _state$gl, _state$gl$renderLists, _state$gl2, _state$gl3;
|
|
1750
|
+
|
|
1751
|
+
state.events.disconnect == null ? void 0 : state.events.disconnect();
|
|
1752
|
+
(_state$gl = state.gl) == null ? void 0 : (_state$gl$renderLists = _state$gl.renderLists) == null ? void 0 : _state$gl$renderLists.dispose == null ? void 0 : _state$gl$renderLists.dispose();
|
|
1753
|
+
(_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();
|
|
1754
|
+
if ((_state$gl3 = state.gl) != null && _state$gl3.xr) state.internal.xr.disconnect();
|
|
1755
|
+
dispose(state);
|
|
1756
|
+
roots.delete(canvas);
|
|
1757
|
+
if (callback) callback(canvas);
|
|
1758
|
+
} catch (e) {
|
|
1759
|
+
/* ... */
|
|
1760
|
+
}
|
|
1761
|
+
}, 500);
|
|
1762
|
+
}
|
|
1763
|
+
});
|
|
1764
|
+
}
|
|
1556
1765
|
}
|
|
1557
1766
|
|
|
1558
|
-
|
|
1559
|
-
const keys = Array.isArray(input) ? input : [input];
|
|
1560
|
-
return suspendReact.preload(loadingFn(extensions), [Proto, ...keys]);
|
|
1561
|
-
};
|
|
1767
|
+
const act = React__namespace.unstable_act;
|
|
1562
1768
|
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1769
|
+
function createPortal(children, container) {
|
|
1770
|
+
return reconciler.createPortal(children, container, null, null);
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
reconciler.injectIntoDevTools({
|
|
1774
|
+
bundleType: 0 ,
|
|
1775
|
+
rendererPackageName: '@react-three/fiber',
|
|
1776
|
+
version: '18.0.0'
|
|
1777
|
+
});
|
|
1567
1778
|
|
|
1779
|
+
exports.act = act;
|
|
1568
1780
|
exports.addAfterEffect = addAfterEffect;
|
|
1569
1781
|
exports.addEffect = addEffect;
|
|
1570
1782
|
exports.addTail = addTail;
|
|
1783
|
+
exports.advance = advance;
|
|
1784
|
+
exports.applyProps = applyProps;
|
|
1571
1785
|
exports.buildGraph = buildGraph;
|
|
1572
|
-
exports.calculateDpr = calculateDpr;
|
|
1573
1786
|
exports.context = context;
|
|
1574
1787
|
exports.createEvents = createEvents;
|
|
1575
|
-
exports.
|
|
1576
|
-
exports.
|
|
1577
|
-
exports.createStore = createStore;
|
|
1788
|
+
exports.createPortal = createPortal;
|
|
1789
|
+
exports.createRoot = createRoot;
|
|
1578
1790
|
exports.dispose = dispose;
|
|
1579
1791
|
exports.extend = extend;
|
|
1792
|
+
exports.invalidate = invalidate;
|
|
1580
1793
|
exports.is = is;
|
|
1581
|
-
exports.isRenderer = isRenderer;
|
|
1582
1794
|
exports.omit = omit;
|
|
1583
1795
|
exports.pick = pick;
|
|
1796
|
+
exports.reconciler = reconciler;
|
|
1797
|
+
exports.render = render;
|
|
1798
|
+
exports.roots = roots;
|
|
1584
1799
|
exports.threeTypes = threeTypes;
|
|
1800
|
+
exports.unmountComponentAtNode = unmountComponentAtNode;
|
|
1585
1801
|
exports.useFrame = useFrame;
|
|
1586
1802
|
exports.useGraph = useGraph;
|
|
1587
1803
|
exports.useLoader = useLoader;
|