@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
|
@@ -1,112 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { t as ReactThreeFiber,
|
|
3
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
4
|
-
import * as React from 'react';
|
|
1
|
+
import { z as buildGraph, A as is, c as createEvents, e as extend, p as pick, o as omit, a as createRoot, u as unmountComponentAtNode } from '../../dist/index-fccd77b0.esm.js';
|
|
2
|
+
export { t as ReactThreeFiber, y as _roots, x as act, v as addAfterEffect, s as addEffect, w as addTail, q as advance, l as applyProps, i as context, j as createPortal, a as createRoot, m as dispose, e as extend, n as invalidate, k as reconciler, r as render, u as unmountComponentAtNode, f as useFrame, g as useGraph, b as useStore, d as useThree } from '../../dist/index-fccd77b0.esm.js';
|
|
5
3
|
import * as THREE from 'three';
|
|
6
|
-
import { PixelRatio, View, StyleSheet } from 'react-native';
|
|
7
|
-
import { GLView } from 'expo-gl';
|
|
8
|
-
import { DefaultEventPriority, ContinuousEventPriority, DiscreteEventPriority, ConcurrentRoot } from 'react-reconciler/constants';
|
|
9
|
-
import Pressability from 'react-native/Libraries/Pressability/Pressability';
|
|
10
4
|
import { Asset } from 'expo-asset';
|
|
11
5
|
import { readAsStringAsync } from 'expo-file-system';
|
|
12
6
|
import { decode } from 'base64-arraybuffer';
|
|
13
7
|
import { suspend, preload, clear } from 'suspend-react';
|
|
8
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
import { PixelRatio, View, StyleSheet } from 'react-native';
|
|
11
|
+
import { GLView } from 'expo-gl';
|
|
12
|
+
import Pressability from 'react-native/Libraries/Pressability/Pressability';
|
|
13
|
+
import 'react-reconciler/constants';
|
|
14
|
+
import 'zustand';
|
|
14
15
|
import 'react-reconciler';
|
|
15
16
|
import 'scheduler';
|
|
16
|
-
import 'zustand';
|
|
17
|
-
|
|
18
|
-
// @ts-ignore
|
|
19
|
-
const EVENTS = {
|
|
20
|
-
PRESS: 'onPress',
|
|
21
|
-
PRESSIN: 'onPressIn',
|
|
22
|
-
PRESSOUT: 'onPressOut',
|
|
23
|
-
LONGPRESS: 'onLongPress',
|
|
24
|
-
HOVERIN: 'onHoverIn',
|
|
25
|
-
HOVEROUT: 'onHoverOut',
|
|
26
|
-
PRESSMOVE: 'onPressMove'
|
|
27
|
-
};
|
|
28
|
-
const DOM_EVENTS = {
|
|
29
|
-
[EVENTS.PRESS]: 'onClick',
|
|
30
|
-
[EVENTS.PRESSIN]: 'onPointerDown',
|
|
31
|
-
[EVENTS.PRESSOUT]: 'onPointerUp',
|
|
32
|
-
[EVENTS.LONGPRESS]: 'onDoubleClick',
|
|
33
|
-
[EVENTS.HOVERIN]: 'onPointerOver',
|
|
34
|
-
[EVENTS.HOVEROUT]: 'onPointerOut',
|
|
35
|
-
[EVENTS.PRESSMOVE]: 'onPointerMove'
|
|
36
|
-
}; // https://github.com/facebook/react/tree/main/packages/react-reconciler#getcurrenteventpriority
|
|
37
|
-
// Gives React a clue as to how import the current interaction is
|
|
38
|
-
|
|
39
|
-
function getEventPriority() {
|
|
40
|
-
var _window, _window$event;
|
|
41
|
-
|
|
42
|
-
let name = (_window = window) == null ? void 0 : (_window$event = _window.event) == null ? void 0 : _window$event.type;
|
|
43
|
-
|
|
44
|
-
switch (name) {
|
|
45
|
-
case EVENTS.PRESS:
|
|
46
|
-
case EVENTS.PRESSIN:
|
|
47
|
-
case EVENTS.PRESSOUT:
|
|
48
|
-
case EVENTS.LONGPRESS:
|
|
49
|
-
return DiscreteEventPriority;
|
|
50
|
-
|
|
51
|
-
case EVENTS.HOVERIN:
|
|
52
|
-
case EVENTS.HOVEROUT:
|
|
53
|
-
case EVENTS.PRESSMOVE:
|
|
54
|
-
return ContinuousEventPriority;
|
|
55
|
-
|
|
56
|
-
default:
|
|
57
|
-
return DefaultEventPriority;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function createTouchEvents(store) {
|
|
61
|
-
const {
|
|
62
|
-
handlePointer
|
|
63
|
-
} = createEvents(store);
|
|
64
|
-
|
|
65
|
-
const handleTouch = (event, name) => {
|
|
66
|
-
event.persist() // Apply offset
|
|
67
|
-
;
|
|
68
|
-
event.nativeEvent.offsetX = event.nativeEvent.pageX;
|
|
69
|
-
event.nativeEvent.offsetY = event.nativeEvent.pageY; // Emulate DOM event
|
|
70
|
-
|
|
71
|
-
const callback = handlePointer(DOM_EVENTS[name]);
|
|
72
|
-
return callback(event.nativeEvent);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
connected: false,
|
|
77
|
-
handlers: Object.values(EVENTS).reduce((acc, name) => ({ ...acc,
|
|
78
|
-
[name]: event => handleTouch(event, name)
|
|
79
|
-
}), {}),
|
|
80
|
-
connect: () => {
|
|
81
|
-
const {
|
|
82
|
-
set,
|
|
83
|
-
events
|
|
84
|
-
} = store.getState();
|
|
85
|
-
events.disconnect == null ? void 0 : events.disconnect();
|
|
86
|
-
const manager = new Pressability(events == null ? void 0 : events.handlers);
|
|
87
|
-
set(state => ({
|
|
88
|
-
events: { ...state.events,
|
|
89
|
-
connected: manager
|
|
90
|
-
}
|
|
91
|
-
}));
|
|
92
|
-
},
|
|
93
|
-
disconnect: () => {
|
|
94
|
-
const {
|
|
95
|
-
set,
|
|
96
|
-
events
|
|
97
|
-
} = store.getState();
|
|
98
|
-
|
|
99
|
-
if (events.connected) {
|
|
100
|
-
events.connected.reset();
|
|
101
|
-
set(state => ({
|
|
102
|
-
events: { ...state.events,
|
|
103
|
-
connected: false
|
|
104
|
-
}
|
|
105
|
-
}));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
17
|
|
|
111
18
|
/**
|
|
112
19
|
* Generates an asset based on input type.
|
|
@@ -218,205 +125,77 @@ useLoader.clear = function (Proto, input) {
|
|
|
218
125
|
return clear([Proto, ...keys]);
|
|
219
126
|
};
|
|
220
127
|
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
} = createRenderer(roots, getEventPriority);
|
|
230
|
-
|
|
231
|
-
const createRendererInstance = (gl, context) => {
|
|
232
|
-
// Create canvas shim
|
|
233
|
-
const canvas = {
|
|
234
|
-
width: context.drawingBufferWidth,
|
|
235
|
-
height: context.drawingBufferHeight,
|
|
236
|
-
style: {},
|
|
237
|
-
addEventListener: () => {},
|
|
238
|
-
removeEventListener: () => {},
|
|
239
|
-
clientHeight: context.drawingBufferHeight
|
|
240
|
-
}; // If a renderer is specified, return it
|
|
241
|
-
|
|
242
|
-
const customRenderer = typeof gl === 'function' ? gl(canvas, context) : gl;
|
|
243
|
-
if (isRenderer(customRenderer)) return customRenderer; // Create renderer and pass our canvas and its context
|
|
244
|
-
|
|
245
|
-
const renderer = new THREE.WebGLRenderer({
|
|
246
|
-
powerPreference: 'high-performance',
|
|
247
|
-
antialias: true,
|
|
248
|
-
alpha: true,
|
|
249
|
-
...gl,
|
|
250
|
-
canvas,
|
|
251
|
-
context
|
|
252
|
-
}); // Set color management
|
|
253
|
-
|
|
254
|
-
renderer.outputEncoding = THREE.sRGBEncoding;
|
|
255
|
-
renderer.toneMapping = THREE.ACESFilmicToneMapping; // Set GL props
|
|
256
|
-
|
|
257
|
-
if (gl) applyProps(renderer, gl); // Bind render to RN bridge
|
|
258
|
-
|
|
259
|
-
if (context.endFrameEXP) {
|
|
260
|
-
const renderFrame = renderer.render.bind(renderer);
|
|
261
|
-
|
|
262
|
-
renderer.render = (scene, camera) => {
|
|
263
|
-
renderFrame(scene, camera);
|
|
264
|
-
context.endFrameEXP();
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return renderer;
|
|
128
|
+
const EVENTS = {
|
|
129
|
+
PRESS: 'onPress',
|
|
130
|
+
PRESSIN: 'onPressIn',
|
|
131
|
+
PRESSOUT: 'onPressOut',
|
|
132
|
+
LONGPRESS: 'onLongPress',
|
|
133
|
+
HOVERIN: 'onHoverIn',
|
|
134
|
+
HOVEROUT: 'onHoverOut',
|
|
135
|
+
PRESSMOVE: 'onPressMove'
|
|
269
136
|
};
|
|
137
|
+
const DOM_EVENTS = {
|
|
138
|
+
[EVENTS.PRESS]: 'onClick',
|
|
139
|
+
[EVENTS.PRESSIN]: 'onPointerDown',
|
|
140
|
+
[EVENTS.PRESSOUT]: 'onPointerUp',
|
|
141
|
+
[EVENTS.LONGPRESS]: 'onDoubleClick',
|
|
142
|
+
[EVENTS.HOVERIN]: 'onPointerOver',
|
|
143
|
+
[EVENTS.HOVEROUT]: 'onPointerOut',
|
|
144
|
+
[EVENTS.PRESSMOVE]: 'onPointerMove'
|
|
145
|
+
};
|
|
146
|
+
function createTouchEvents(store) {
|
|
147
|
+
const {
|
|
148
|
+
handlePointer
|
|
149
|
+
} = createEvents(store);
|
|
270
150
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
let {
|
|
277
|
-
gl,
|
|
278
|
-
size = {
|
|
279
|
-
width: 0,
|
|
280
|
-
height: 0
|
|
281
|
-
},
|
|
282
|
-
events,
|
|
283
|
-
onCreated,
|
|
284
|
-
...props
|
|
285
|
-
} = config || {};
|
|
286
|
-
let root = roots.get(context);
|
|
287
|
-
let fiber = root == null ? void 0 : root.fiber;
|
|
288
|
-
let store = root == null ? void 0 : root.store;
|
|
289
|
-
let state = (_store = store) == null ? void 0 : _store.getState();
|
|
290
|
-
|
|
291
|
-
if (fiber && state) {
|
|
292
|
-
// When a root was found, see if any fundamental props must be changed or exchanged
|
|
293
|
-
// Check size
|
|
294
|
-
if (state.size.width !== size.width || state.size.height !== size.height) state.setSize(size.width, size.height); // Check frameloop
|
|
295
|
-
|
|
296
|
-
if (state.frameloop !== props.frameloop) state.setFrameloop(props.frameloop); // For some props we want to reset the entire root
|
|
297
|
-
// Changes to the color-space
|
|
298
|
-
|
|
299
|
-
const linearChanged = props.linear !== state.internal.lastProps.linear;
|
|
300
|
-
|
|
301
|
-
if (linearChanged) {
|
|
302
|
-
unmountComponentAtNode(context);
|
|
303
|
-
fiber = undefined;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
if (!fiber) {
|
|
308
|
-
// If no root has been found, make one
|
|
309
|
-
// Create gl
|
|
310
|
-
const glRenderer = createRendererInstance(gl, context); // Create store
|
|
311
|
-
|
|
312
|
-
store = createStore(applyProps, invalidate, advance, {
|
|
313
|
-
gl: glRenderer,
|
|
314
|
-
size,
|
|
315
|
-
...props,
|
|
316
|
-
// expo-gl can only render at native dpr/resolution
|
|
317
|
-
// https://github.com/expo/expo-three/issues/39
|
|
318
|
-
dpr: PixelRatio.get()
|
|
319
|
-
});
|
|
320
|
-
const state = store.getState(); // Create renderer
|
|
321
|
-
|
|
322
|
-
fiber = reconciler.createContainer(store, ConcurrentRoot, false, null); // Map it
|
|
323
|
-
|
|
324
|
-
roots.set(context, {
|
|
325
|
-
fiber,
|
|
326
|
-
store
|
|
327
|
-
}); // Store event manager internally and connect it
|
|
328
|
-
|
|
329
|
-
if (events) {
|
|
330
|
-
var _state$get$events$con, _state$get$events;
|
|
331
|
-
|
|
332
|
-
state.set({
|
|
333
|
-
events: events(store)
|
|
334
|
-
});
|
|
335
|
-
(_state$get$events$con = (_state$get$events = state.get().events).connect) == null ? void 0 : _state$get$events$con.call(_state$get$events, context);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
151
|
+
const handleTouch = (event, name) => {
|
|
152
|
+
event.persist() // Apply offset
|
|
153
|
+
;
|
|
154
|
+
event.nativeEvent.offsetX = event.nativeEvent.pageX;
|
|
155
|
+
event.nativeEvent.offsetY = event.nativeEvent.pageY; // Emulate DOM event
|
|
338
156
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
store: store,
|
|
342
|
-
element: element,
|
|
343
|
-
onCreated: onCreated
|
|
344
|
-
}), fiber, null, () => undefined);
|
|
345
|
-
return store;
|
|
346
|
-
} else {
|
|
347
|
-
throw 'Error creating root!';
|
|
348
|
-
}
|
|
349
|
-
},
|
|
350
|
-
unmount: () => unmountComponentAtNode(context)
|
|
157
|
+
const callback = handlePointer(DOM_EVENTS[name]);
|
|
158
|
+
return callback(event.nativeEvent);
|
|
351
159
|
};
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
function render(element, context, config = {}) {
|
|
355
|
-
console.warn('R3F.render is no longer supported in React 18. Use createRoot instead!');
|
|
356
|
-
return createRoot(context, config).render(element);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
function Provider({
|
|
360
|
-
store,
|
|
361
|
-
element,
|
|
362
|
-
onCreated
|
|
363
|
-
}) {
|
|
364
|
-
React.useEffect(() => {
|
|
365
|
-
const state = store.getState(); // Flag the canvas active, rendering will now begin
|
|
366
160
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
})
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
161
|
+
return {
|
|
162
|
+
connected: false,
|
|
163
|
+
handlers: Object.values(EVENTS).reduce((acc, name) => ({ ...acc,
|
|
164
|
+
[name]: event => handleTouch(event, name)
|
|
165
|
+
}), {}),
|
|
166
|
+
connect: () => {
|
|
167
|
+
const {
|
|
168
|
+
set,
|
|
169
|
+
events
|
|
170
|
+
} = store.getState();
|
|
171
|
+
events.disconnect == null ? void 0 : events.disconnect();
|
|
172
|
+
const connected = new Pressability(events == null ? void 0 : events.handlers);
|
|
173
|
+
const handlers = connected.getEventHandlers();
|
|
174
|
+
set(state => ({
|
|
175
|
+
events: { ...state.events,
|
|
176
|
+
connected,
|
|
177
|
+
handlers
|
|
178
|
+
}
|
|
179
|
+
}));
|
|
180
|
+
},
|
|
181
|
+
disconnect: () => {
|
|
182
|
+
const {
|
|
183
|
+
set,
|
|
184
|
+
events
|
|
185
|
+
} = store.getState();
|
|
379
186
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
const state = root == null ? void 0 : root.store.getState();
|
|
386
|
-
if (state) state.internal.active = false;
|
|
387
|
-
reconciler.updateContainer(null, fiber, null, () => {
|
|
388
|
-
if (state) {
|
|
389
|
-
setTimeout(() => {
|
|
390
|
-
try {
|
|
391
|
-
var _state$gl, _state$gl$renderLists, _state$gl2;
|
|
392
|
-
|
|
393
|
-
state.events.disconnect == null ? void 0 : state.events.disconnect();
|
|
394
|
-
(_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();
|
|
395
|
-
(_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();
|
|
396
|
-
dispose(state);
|
|
397
|
-
roots.delete(context);
|
|
398
|
-
if (callback) callback(context);
|
|
399
|
-
} catch (e) {
|
|
400
|
-
/* ... */
|
|
187
|
+
if (events.connected) {
|
|
188
|
+
events.connected.reset();
|
|
189
|
+
set(state => ({
|
|
190
|
+
events: { ...state.events,
|
|
191
|
+
connected: false
|
|
401
192
|
}
|
|
402
|
-
}
|
|
193
|
+
}));
|
|
403
194
|
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
const act = React.unstable_act;
|
|
409
|
-
|
|
410
|
-
function createPortal(children, container) {
|
|
411
|
-
return reconciler.createPortal(children, container, null, null);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
412
197
|
}
|
|
413
198
|
|
|
414
|
-
reconciler.injectIntoDevTools({
|
|
415
|
-
bundleType: process.env.NODE_ENV === 'production' ? 0 : 1,
|
|
416
|
-
rendererPackageName: '@react-three/fiber',
|
|
417
|
-
version: '18.0.0'
|
|
418
|
-
});
|
|
419
|
-
|
|
420
199
|
const CANVAS_PROPS = ['gl', 'events', 'shadows', 'linear', 'flat', 'orthographic', 'frameloop', 'performance', 'clock', 'raycaster', 'camera', 'onPointerMissed', 'onCreated'];
|
|
421
200
|
|
|
422
201
|
function Block({
|
|
@@ -456,8 +235,6 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
456
235
|
fallback,
|
|
457
236
|
style,
|
|
458
237
|
events,
|
|
459
|
-
nativeRef_EXPERIMENTAL,
|
|
460
|
-
onContextCreate,
|
|
461
238
|
...props
|
|
462
239
|
}, forwardedRef) => {
|
|
463
240
|
// Create a known catalogue of Threejs-native elements
|
|
@@ -471,7 +248,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
471
248
|
width: 0,
|
|
472
249
|
height: 0
|
|
473
250
|
});
|
|
474
|
-
const [
|
|
251
|
+
const [canvas, setCanvas] = React.useState(null);
|
|
475
252
|
const [bind, setBind] = React.useState();
|
|
476
253
|
const canvasProps = pick(props, CANVAS_PROPS);
|
|
477
254
|
const viewProps = omit(props, CANVAS_PROPS);
|
|
@@ -491,14 +268,46 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
491
268
|
height
|
|
492
269
|
});
|
|
493
270
|
}, []);
|
|
271
|
+
const onContextCreate = React.useCallback(context => {
|
|
272
|
+
const canvasShim = {
|
|
273
|
+
width: context.drawingBufferWidth,
|
|
274
|
+
height: context.drawingBufferHeight,
|
|
275
|
+
style: {},
|
|
276
|
+
addEventListener: () => {},
|
|
277
|
+
removeEventListener: () => {},
|
|
278
|
+
clientHeight: context.drawingBufferHeight,
|
|
279
|
+
getContext: () => context
|
|
280
|
+
};
|
|
281
|
+
setCanvas(canvasShim);
|
|
282
|
+
}, []);
|
|
283
|
+
|
|
284
|
+
if (width > 0 && height > 0 && canvas) {
|
|
285
|
+
// Overwrite onCreated to apply RN bindings
|
|
286
|
+
const onCreated = state => {
|
|
287
|
+
// Bind events after creation
|
|
288
|
+
setBind(state.events.handlers); // Bind render to RN bridge
|
|
289
|
+
|
|
290
|
+
const context = state.gl.getContext();
|
|
291
|
+
const renderFrame = state.gl.render.bind(state.gl);
|
|
292
|
+
|
|
293
|
+
state.gl.render = (scene, camera) => {
|
|
294
|
+
renderFrame(scene, camera);
|
|
295
|
+
context.endFrameEXP();
|
|
296
|
+
};
|
|
494
297
|
|
|
495
|
-
|
|
496
|
-
|
|
298
|
+
return canvasProps == null ? void 0 : canvasProps.onCreated == null ? void 0 : canvasProps.onCreated(state);
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
createRoot(canvas, { ...canvasProps,
|
|
302
|
+
// expo-gl can only render at native dpr/resolution
|
|
303
|
+
// https://github.com/expo/expo-three/issues/39
|
|
304
|
+
dpr: PixelRatio.get(),
|
|
497
305
|
size: {
|
|
498
306
|
width,
|
|
499
307
|
height
|
|
500
308
|
},
|
|
501
|
-
events: events || createTouchEvents
|
|
309
|
+
events: events || createTouchEvents,
|
|
310
|
+
onCreated
|
|
502
311
|
}).render( /*#__PURE__*/React.createElement(ErrorBoundary, {
|
|
503
312
|
set: setError
|
|
504
313
|
}, /*#__PURE__*/React.createElement(React.Suspense, {
|
|
@@ -506,13 +315,11 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
506
315
|
set: setBlock
|
|
507
316
|
})
|
|
508
317
|
}, children)));
|
|
509
|
-
const state = store.getState();
|
|
510
|
-
setBind(state.events.connected.getEventHandlers());
|
|
511
318
|
}
|
|
512
319
|
|
|
513
320
|
React.useEffect(() => {
|
|
514
|
-
return () => unmountComponentAtNode(
|
|
515
|
-
}, [
|
|
321
|
+
return () => unmountComponentAtNode(canvas);
|
|
322
|
+
}, [canvas]);
|
|
516
323
|
return /*#__PURE__*/React.createElement(View, _extends({}, viewProps, {
|
|
517
324
|
ref: forwardedRef,
|
|
518
325
|
onLayout: onLayout,
|
|
@@ -521,17 +328,9 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
521
328
|
...style
|
|
522
329
|
}
|
|
523
330
|
}, bind), width > 0 && /*#__PURE__*/React.createElement(GLView, {
|
|
524
|
-
|
|
525
|
-
if (nativeRef_EXPERIMENTAL && !nativeRef_EXPERIMENTAL.current) {
|
|
526
|
-
nativeRef_EXPERIMENTAL.current = ref;
|
|
527
|
-
}
|
|
528
|
-
},
|
|
529
|
-
onContextCreate: async gl => {
|
|
530
|
-
await (onContextCreate == null ? void 0 : onContextCreate(gl));
|
|
531
|
-
setContext(gl);
|
|
532
|
-
},
|
|
331
|
+
onContextCreate: onContextCreate,
|
|
533
332
|
style: StyleSheet.absoluteFill
|
|
534
333
|
}));
|
|
535
334
|
});
|
|
536
335
|
|
|
537
|
-
export { Canvas,
|
|
336
|
+
export { Canvas, createTouchEvents as events, useLoader };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-three/fiber",
|
|
3
|
-
"version": "8.0.0-beta-
|
|
3
|
+
"version": "8.0.0-beta-04",
|
|
4
4
|
"description": "A React renderer for Threejs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"expo-asset": "^8.4.3",
|
|
48
48
|
"expo-file-system": "^13.0.3",
|
|
49
49
|
"expo-gl": "^11.0.3",
|
|
50
|
+
"expo": "^43.0.1",
|
|
50
51
|
"react-merge-refs": "^1.1.0",
|
|
51
52
|
"react-reconciler": "^0.27.0-rc.0",
|
|
52
53
|
"react-use-measure": "^2.1.1",
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/// <reference types="react-reconciler" />
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import { UseStore } from 'zustand';
|
|
5
|
-
import { dispose } from '../core/utils';
|
|
6
|
-
import { Renderer, StoreProps, context, RootState, Size } from '../core/store';
|
|
7
|
-
import { extend, Root } from '../core/renderer';
|
|
8
|
-
import { addEffect, addAfterEffect, addTail } from '../core/loop';
|
|
9
|
-
import { createTouchEvents as events } from './events';
|
|
10
|
-
import { EventManager } from '../core/events';
|
|
11
|
-
import { View } from 'react-native';
|
|
12
|
-
import { ExpoWebGLRenderingContext } from 'expo-gl';
|
|
13
|
-
export declare type GLContext = ExpoWebGLRenderingContext | WebGLRenderingContext;
|
|
14
|
-
declare type Properties<T> = Pick<T, {
|
|
15
|
-
[K in keyof T]: T[K] extends (_: any) => any ? never : K;
|
|
16
|
-
}[keyof T]>;
|
|
17
|
-
declare type GLProps = Renderer | ((canvas: HTMLCanvasElement, context: GLContext) => Renderer) | Partial<Properties<THREE.WebGLRenderer> | THREE.WebGLRendererParameters> | undefined;
|
|
18
|
-
declare const roots: Map<GLContext, Root>;
|
|
19
|
-
declare const invalidate: (state?: RootState | undefined) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState | undefined) => void;
|
|
20
|
-
declare const reconciler: import("react-reconciler").Reconciler<unknown, unknown, unknown, unknown, unknown>, applyProps: typeof import("../core/utils").applyProps;
|
|
21
|
-
export declare type RenderProps<TView extends View> = Omit<StoreProps, 'gl' | 'events' | 'size' | 'dpr'> & {
|
|
22
|
-
gl?: GLProps;
|
|
23
|
-
events?: (store: UseStore<RootState>) => EventManager<TView>;
|
|
24
|
-
size?: Size;
|
|
25
|
-
onCreated?: (state: RootState) => void;
|
|
26
|
-
};
|
|
27
|
-
declare function createRoot<TView extends View>(context: GLContext, config?: RenderProps<TView>): {
|
|
28
|
-
render: (element: React.ReactNode) => UseStore<RootState>;
|
|
29
|
-
unmount: () => void;
|
|
30
|
-
};
|
|
31
|
-
declare function render<TView extends View>(element: React.ReactNode, context: GLContext, config?: RenderProps<TView>): UseStore<RootState>;
|
|
32
|
-
declare function unmountComponentAtNode(context: GLContext, callback?: (context: GLContext) => void): void;
|
|
33
|
-
declare const act: any;
|
|
34
|
-
declare function createPortal(children: React.ReactNode, container: THREE.Object3D): React.ReactNode;
|
|
35
|
-
export * from './hooks';
|
|
36
|
-
export { context, render, createRoot, unmountComponentAtNode, createPortal, events, reconciler, applyProps, dispose, invalidate, advance, extend, addEffect, addAfterEffect, addTail, act, roots as _roots, };
|