@react-three/fiber 8.0.16 → 8.0.17
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 +6 -0
- package/dist/declarations/src/native/polyfills.d.ts +1 -0
- package/dist/react-three-fiber.cjs.dev.js +13 -8
- package/dist/react-three-fiber.cjs.prod.js +13 -8
- package/dist/react-three-fiber.esm.js +13 -7
- package/native/dist/react-three-fiber-native.cjs.dev.js +115 -90
- package/native/dist/react-three-fiber-native.cjs.prod.js +115 -90
- package/native/dist/react-three-fiber-native.esm.js +114 -88
- package/package.json +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function polyfills(): (() => void) | undefined;
|
|
@@ -6,7 +6,6 @@ var index = require('./index-f3176a33.cjs.dev.js');
|
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
9
|
-
var mergeRefs = require('react-merge-refs');
|
|
10
9
|
var useMeasure = require('react-use-measure');
|
|
11
10
|
require('react-reconciler/constants');
|
|
12
11
|
require('zustand');
|
|
@@ -36,7 +35,6 @@ function _interopNamespace(e) {
|
|
|
36
35
|
|
|
37
36
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
38
37
|
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
39
|
-
var mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
|
|
40
38
|
var useMeasure__default = /*#__PURE__*/_interopDefault(useMeasure);
|
|
41
39
|
|
|
42
40
|
const DOM_EVENTS = {
|
|
@@ -158,8 +156,9 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
158
156
|
...resize
|
|
159
157
|
});
|
|
160
158
|
const canvasRef = React__namespace.useRef(null);
|
|
161
|
-
const
|
|
159
|
+
const divRef = React__namespace.useRef(null);
|
|
162
160
|
const [canvas, setCanvas] = React__namespace.useState(null);
|
|
161
|
+
React__namespace.useImperativeHandle(forwardedRef, () => canvasRef.current);
|
|
163
162
|
const handlePointerMissed = index.useMutableCallback(onPointerMissed);
|
|
164
163
|
const [block, setBlock] = React__namespace.useState(false);
|
|
165
164
|
const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -191,7 +190,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
191
190
|
// Pass mutable reference to onPointerMissed so it's free to update
|
|
192
191
|
onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),
|
|
193
192
|
onCreated: state => {
|
|
194
|
-
state.events.connect == null ? void 0 : state.events.connect(
|
|
193
|
+
state.events.connect == null ? void 0 : state.events.connect(divRef.current);
|
|
195
194
|
onCreated == null ? void 0 : onCreated(state);
|
|
196
195
|
}
|
|
197
196
|
});
|
|
@@ -211,7 +210,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
211
210
|
if (canvas) return () => index.unmountComponentAtNode(canvas);
|
|
212
211
|
}, [canvas]);
|
|
213
212
|
return /*#__PURE__*/React__namespace.createElement("div", _extends({
|
|
214
|
-
ref:
|
|
213
|
+
ref: divRef,
|
|
215
214
|
style: {
|
|
216
215
|
position: 'relative',
|
|
217
216
|
width: '100%',
|
|
@@ -219,12 +218,18 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
219
218
|
overflow: 'hidden',
|
|
220
219
|
...style
|
|
221
220
|
}
|
|
222
|
-
}, props), /*#__PURE__*/React__namespace.createElement("
|
|
223
|
-
ref:
|
|
221
|
+
}, props), /*#__PURE__*/React__namespace.createElement("div", {
|
|
222
|
+
ref: containerRef,
|
|
223
|
+
style: {
|
|
224
|
+
width: '100%',
|
|
225
|
+
height: '100%'
|
|
226
|
+
}
|
|
227
|
+
}, /*#__PURE__*/React__namespace.createElement("canvas", {
|
|
228
|
+
ref: canvasRef,
|
|
224
229
|
style: {
|
|
225
230
|
display: 'block'
|
|
226
231
|
}
|
|
227
|
-
}, fallback));
|
|
232
|
+
}, fallback)));
|
|
228
233
|
});
|
|
229
234
|
|
|
230
235
|
exports.ReactThreeFiber = index.threeTypes;
|
|
@@ -6,7 +6,6 @@ var index = require('./index-4e1c76e5.cjs.prod.js');
|
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var THREE = require('three');
|
|
9
|
-
var mergeRefs = require('react-merge-refs');
|
|
10
9
|
var useMeasure = require('react-use-measure');
|
|
11
10
|
require('react-reconciler/constants');
|
|
12
11
|
require('zustand');
|
|
@@ -36,7 +35,6 @@ function _interopNamespace(e) {
|
|
|
36
35
|
|
|
37
36
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
38
37
|
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
39
|
-
var mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
|
|
40
38
|
var useMeasure__default = /*#__PURE__*/_interopDefault(useMeasure);
|
|
41
39
|
|
|
42
40
|
const DOM_EVENTS = {
|
|
@@ -158,8 +156,9 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
158
156
|
...resize
|
|
159
157
|
});
|
|
160
158
|
const canvasRef = React__namespace.useRef(null);
|
|
161
|
-
const
|
|
159
|
+
const divRef = React__namespace.useRef(null);
|
|
162
160
|
const [canvas, setCanvas] = React__namespace.useState(null);
|
|
161
|
+
React__namespace.useImperativeHandle(forwardedRef, () => canvasRef.current);
|
|
163
162
|
const handlePointerMissed = index.useMutableCallback(onPointerMissed);
|
|
164
163
|
const [block, setBlock] = React__namespace.useState(false);
|
|
165
164
|
const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -191,7 +190,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
191
190
|
// Pass mutable reference to onPointerMissed so it's free to update
|
|
192
191
|
onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),
|
|
193
192
|
onCreated: state => {
|
|
194
|
-
state.events.connect == null ? void 0 : state.events.connect(
|
|
193
|
+
state.events.connect == null ? void 0 : state.events.connect(divRef.current);
|
|
195
194
|
onCreated == null ? void 0 : onCreated(state);
|
|
196
195
|
}
|
|
197
196
|
});
|
|
@@ -211,7 +210,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
211
210
|
if (canvas) return () => index.unmountComponentAtNode(canvas);
|
|
212
211
|
}, [canvas]);
|
|
213
212
|
return /*#__PURE__*/React__namespace.createElement("div", _extends({
|
|
214
|
-
ref:
|
|
213
|
+
ref: divRef,
|
|
215
214
|
style: {
|
|
216
215
|
position: 'relative',
|
|
217
216
|
width: '100%',
|
|
@@ -219,12 +218,18 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
|
|
|
219
218
|
overflow: 'hidden',
|
|
220
219
|
...style
|
|
221
220
|
}
|
|
222
|
-
}, props), /*#__PURE__*/React__namespace.createElement("
|
|
223
|
-
ref:
|
|
221
|
+
}, props), /*#__PURE__*/React__namespace.createElement("div", {
|
|
222
|
+
ref: containerRef,
|
|
223
|
+
style: {
|
|
224
|
+
width: '100%',
|
|
225
|
+
height: '100%'
|
|
226
|
+
}
|
|
227
|
+
}, /*#__PURE__*/React__namespace.createElement("canvas", {
|
|
228
|
+
ref: canvasRef,
|
|
224
229
|
style: {
|
|
225
230
|
display: 'block'
|
|
226
231
|
}
|
|
227
|
-
}, fallback));
|
|
232
|
+
}, fallback)));
|
|
228
233
|
});
|
|
229
234
|
|
|
230
235
|
exports.ReactThreeFiber = index.threeTypes;
|
|
@@ -3,7 +3,6 @@ export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as
|
|
|
3
3
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
|
-
import mergeRefs from 'react-merge-refs';
|
|
7
6
|
import useMeasure from 'react-use-measure';
|
|
8
7
|
import 'react-reconciler/constants';
|
|
9
8
|
import 'zustand';
|
|
@@ -130,8 +129,9 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
|
|
|
130
129
|
...resize
|
|
131
130
|
});
|
|
132
131
|
const canvasRef = React.useRef(null);
|
|
133
|
-
const
|
|
132
|
+
const divRef = React.useRef(null);
|
|
134
133
|
const [canvas, setCanvas] = React.useState(null);
|
|
134
|
+
React.useImperativeHandle(forwardedRef, () => canvasRef.current);
|
|
135
135
|
const handlePointerMissed = useMutableCallback(onPointerMissed);
|
|
136
136
|
const [block, setBlock] = React.useState(false);
|
|
137
137
|
const [error, setError] = React.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -163,7 +163,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
|
|
|
163
163
|
// Pass mutable reference to onPointerMissed so it's free to update
|
|
164
164
|
onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),
|
|
165
165
|
onCreated: state => {
|
|
166
|
-
state.events.connect == null ? void 0 : state.events.connect(
|
|
166
|
+
state.events.connect == null ? void 0 : state.events.connect(divRef.current);
|
|
167
167
|
onCreated == null ? void 0 : onCreated(state);
|
|
168
168
|
}
|
|
169
169
|
});
|
|
@@ -183,7 +183,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
|
|
|
183
183
|
if (canvas) return () => unmountComponentAtNode(canvas);
|
|
184
184
|
}, [canvas]);
|
|
185
185
|
return /*#__PURE__*/React.createElement("div", _extends({
|
|
186
|
-
ref:
|
|
186
|
+
ref: divRef,
|
|
187
187
|
style: {
|
|
188
188
|
position: 'relative',
|
|
189
189
|
width: '100%',
|
|
@@ -191,12 +191,18 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
|
|
|
191
191
|
overflow: 'hidden',
|
|
192
192
|
...style
|
|
193
193
|
}
|
|
194
|
-
}, props), /*#__PURE__*/React.createElement("
|
|
195
|
-
ref:
|
|
194
|
+
}, props), /*#__PURE__*/React.createElement("div", {
|
|
195
|
+
ref: containerRef,
|
|
196
|
+
style: {
|
|
197
|
+
width: '100%',
|
|
198
|
+
height: '100%'
|
|
199
|
+
}
|
|
200
|
+
}, /*#__PURE__*/React.createElement("canvas", {
|
|
201
|
+
ref: canvasRef,
|
|
196
202
|
style: {
|
|
197
203
|
display: 'block'
|
|
198
204
|
}
|
|
199
|
-
}, fallback));
|
|
205
|
+
}, fallback)));
|
|
200
206
|
});
|
|
201
207
|
|
|
202
208
|
export { Canvas, createPointerEvents as events };
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var THREE = require('three');
|
|
6
|
-
var expoAsset = require('expo-asset');
|
|
7
5
|
var index = require('../../dist/index-f3176a33.cjs.dev.js');
|
|
8
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
7
|
var React = require('react');
|
|
10
|
-
var
|
|
8
|
+
var THREE = require('three');
|
|
11
9
|
var reactNative = require('react-native');
|
|
12
10
|
var expoGl = require('expo-gl');
|
|
13
11
|
var Pressability = require('react-native/Libraries/Pressability/Pressability');
|
|
@@ -37,9 +35,8 @@ function _interopNamespace(e) {
|
|
|
37
35
|
return Object.freeze(n);
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
41
38
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
42
|
-
var
|
|
39
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
43
40
|
var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
|
|
44
41
|
|
|
45
42
|
const EVENTS = {
|
|
@@ -125,6 +122,114 @@ function createTouchEvents(store) {
|
|
|
125
122
|
};
|
|
126
123
|
}
|
|
127
124
|
|
|
125
|
+
// Check if expo-asset is installed (available with expo modules)
|
|
126
|
+
let expAsset;
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
var _require;
|
|
130
|
+
|
|
131
|
+
expAsset = (_require = require('expo-asset')) == null ? void 0 : _require.Asset;
|
|
132
|
+
} catch (_) {}
|
|
133
|
+
/**
|
|
134
|
+
* Generates an asset based on input type.
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
function getAsset(input) {
|
|
139
|
+
switch (typeof input) {
|
|
140
|
+
case 'string':
|
|
141
|
+
return expAsset.fromURI(input);
|
|
142
|
+
|
|
143
|
+
case 'number':
|
|
144
|
+
return expAsset.fromModule(input);
|
|
145
|
+
|
|
146
|
+
default:
|
|
147
|
+
throw 'Invalid asset! Must be a URI or module.';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let injected = false;
|
|
152
|
+
function polyfills() {
|
|
153
|
+
if (!expAsset || injected) return;
|
|
154
|
+
injected = true; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
155
|
+
|
|
156
|
+
const extractUrlBase = THREE__namespace.LoaderUtils.extractUrlBase.bind(THREE__namespace.LoaderUtils);
|
|
157
|
+
|
|
158
|
+
THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
const prevTextureLoad = THREE__namespace.TextureLoader.prototype.load;
|
|
162
|
+
|
|
163
|
+
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
164
|
+
const texture = new THREE__namespace.Texture(); // @ts-ignore
|
|
165
|
+
|
|
166
|
+
texture.isDataTexture = true;
|
|
167
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
168
|
+
texture.image = {
|
|
169
|
+
data: asset,
|
|
170
|
+
width: asset.width,
|
|
171
|
+
height: asset.height
|
|
172
|
+
};
|
|
173
|
+
texture.flipY = true;
|
|
174
|
+
texture.unpackAlignment = 1;
|
|
175
|
+
texture.needsUpdate = true;
|
|
176
|
+
onLoad == null ? void 0 : onLoad(texture);
|
|
177
|
+
}).catch(onError);
|
|
178
|
+
return texture;
|
|
179
|
+
}; // Fetches assets via XMLHttpRequest
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
const prevFileLoad = THREE__namespace.FileLoader.prototype.load;
|
|
183
|
+
|
|
184
|
+
THREE__namespace.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
185
|
+
if (this.path) url = this.path + url;
|
|
186
|
+
const request = new XMLHttpRequest();
|
|
187
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
188
|
+
request.open('GET', asset.uri, true);
|
|
189
|
+
request.addEventListener('load', event => {
|
|
190
|
+
if (request.status === 200) {
|
|
191
|
+
onLoad == null ? void 0 : onLoad(request.response);
|
|
192
|
+
this.manager.itemEnd(url);
|
|
193
|
+
} else {
|
|
194
|
+
onError == null ? void 0 : onError(event);
|
|
195
|
+
this.manager.itemError(url);
|
|
196
|
+
this.manager.itemEnd(url);
|
|
197
|
+
}
|
|
198
|
+
}, false);
|
|
199
|
+
request.addEventListener('progress', event => {
|
|
200
|
+
onProgress == null ? void 0 : onProgress(event);
|
|
201
|
+
}, false);
|
|
202
|
+
request.addEventListener('error', event => {
|
|
203
|
+
onError == null ? void 0 : onError(event);
|
|
204
|
+
this.manager.itemError(url);
|
|
205
|
+
this.manager.itemEnd(url);
|
|
206
|
+
}, false);
|
|
207
|
+
request.addEventListener('abort', event => {
|
|
208
|
+
onError == null ? void 0 : onError(event);
|
|
209
|
+
this.manager.itemError(url);
|
|
210
|
+
this.manager.itemEnd(url);
|
|
211
|
+
}, false);
|
|
212
|
+
if (this.responseType) request.responseType = this.responseType;
|
|
213
|
+
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
214
|
+
|
|
215
|
+
for (const header in this.requestHeader) {
|
|
216
|
+
request.setRequestHeader(header, this.requestHeader[header]);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
request.send(null);
|
|
220
|
+
this.manager.itemStart(url);
|
|
221
|
+
});
|
|
222
|
+
return request;
|
|
223
|
+
}; // Cleanup function
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
return () => {
|
|
227
|
+
THREE__namespace.LoaderUtils.extractUrlBase = extractUrlBase;
|
|
228
|
+
THREE__namespace.TextureLoader.prototype.load = prevTextureLoad;
|
|
229
|
+
THREE__namespace.FileLoader.prototype.load = prevFileLoad;
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
128
233
|
/**
|
|
129
234
|
* A native canvas which accepts threejs elements as children.
|
|
130
235
|
* @see https://docs.pmnd.rs/react-three-fiber/api/canvas
|
|
@@ -160,6 +265,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
160
265
|
});
|
|
161
266
|
const [canvas, setCanvas] = React__namespace.useState(null);
|
|
162
267
|
const [bind, setBind] = React__namespace.useState();
|
|
268
|
+
React__namespace.useImperativeHandle(forwardedRef, () => viewRef.current);
|
|
163
269
|
const handlePointerMissed = index.useMutableCallback(onPointerMissed);
|
|
164
270
|
const [block, setBlock] = React__namespace.useState(false);
|
|
165
271
|
const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -168,7 +274,9 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
168
274
|
|
|
169
275
|
if (error) throw error;
|
|
170
276
|
const viewRef = React__namespace.useRef(null);
|
|
171
|
-
const root = React__namespace.useRef(null);
|
|
277
|
+
const root = React__namespace.useRef(null); // Inject and cleanup RN polyfills if able
|
|
278
|
+
|
|
279
|
+
React__namespace.useLayoutEffect(() => polyfills(), []);
|
|
172
280
|
const onLayout = React__namespace.useCallback(e => {
|
|
173
281
|
const {
|
|
174
282
|
width,
|
|
@@ -247,7 +355,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
247
355
|
}
|
|
248
356
|
}, [canvas]);
|
|
249
357
|
return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, props, {
|
|
250
|
-
ref:
|
|
358
|
+
ref: viewRef,
|
|
251
359
|
onLayout: onLayout,
|
|
252
360
|
style: {
|
|
253
361
|
flex: 1,
|
|
@@ -259,89 +367,6 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
259
367
|
}));
|
|
260
368
|
});
|
|
261
369
|
|
|
262
|
-
/**
|
|
263
|
-
* Generates an asset based on input type.
|
|
264
|
-
*/
|
|
265
|
-
|
|
266
|
-
const getAsset = input => {
|
|
267
|
-
if (input instanceof expoAsset.Asset) return input;
|
|
268
|
-
|
|
269
|
-
switch (typeof input) {
|
|
270
|
-
case 'string':
|
|
271
|
-
return expoAsset.Asset.fromURI(input);
|
|
272
|
-
|
|
273
|
-
case 'number':
|
|
274
|
-
return expoAsset.Asset.fromModule(input);
|
|
275
|
-
|
|
276
|
-
default:
|
|
277
|
-
throw 'Invalid asset! Must be a URI or module.';
|
|
278
|
-
}
|
|
279
|
-
}; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const extractUrlBase = THREE__namespace.LoaderUtils.extractUrlBase.bind(THREE__namespace.LoaderUtils);
|
|
283
|
-
|
|
284
|
-
THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
288
|
-
const texture = new THREE__namespace.Texture(); // @ts-ignore
|
|
289
|
-
|
|
290
|
-
texture.isDataTexture = true;
|
|
291
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
292
|
-
texture.image = {
|
|
293
|
-
data: asset,
|
|
294
|
-
width: asset.width,
|
|
295
|
-
height: asset.height
|
|
296
|
-
};
|
|
297
|
-
texture.needsUpdate = true;
|
|
298
|
-
onLoad == null ? void 0 : onLoad(texture);
|
|
299
|
-
}).catch(onError);
|
|
300
|
-
return texture;
|
|
301
|
-
}; // Fetches assets via XMLHttpRequest
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
THREE__namespace.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
305
|
-
if (this.path) url = this.path + url;
|
|
306
|
-
const request = new XMLHttpRequest();
|
|
307
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
308
|
-
request.open('GET', asset.uri, true);
|
|
309
|
-
request.addEventListener('load', event => {
|
|
310
|
-
if (request.status === 200) {
|
|
311
|
-
onLoad == null ? void 0 : onLoad(request.response);
|
|
312
|
-
this.manager.itemEnd(url);
|
|
313
|
-
} else {
|
|
314
|
-
onError == null ? void 0 : onError(event);
|
|
315
|
-
this.manager.itemError(url);
|
|
316
|
-
this.manager.itemEnd(url);
|
|
317
|
-
}
|
|
318
|
-
}, false);
|
|
319
|
-
request.addEventListener('progress', event => {
|
|
320
|
-
onProgress == null ? void 0 : onProgress(event);
|
|
321
|
-
}, false);
|
|
322
|
-
request.addEventListener('error', event => {
|
|
323
|
-
onError == null ? void 0 : onError(event);
|
|
324
|
-
this.manager.itemError(url);
|
|
325
|
-
this.manager.itemEnd(url);
|
|
326
|
-
}, false);
|
|
327
|
-
request.addEventListener('abort', event => {
|
|
328
|
-
onError == null ? void 0 : onError(event);
|
|
329
|
-
this.manager.itemError(url);
|
|
330
|
-
this.manager.itemEnd(url);
|
|
331
|
-
}, false);
|
|
332
|
-
if (this.responseType) request.responseType = this.responseType;
|
|
333
|
-
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
334
|
-
|
|
335
|
-
for (const header in this.requestHeader) {
|
|
336
|
-
request.setRequestHeader(header, this.requestHeader[header]);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
request.send(null);
|
|
340
|
-
this.manager.itemStart(url);
|
|
341
|
-
});
|
|
342
|
-
return request;
|
|
343
|
-
};
|
|
344
|
-
|
|
345
370
|
exports.ReactThreeFiber = index.threeTypes;
|
|
346
371
|
exports._roots = index.roots;
|
|
347
372
|
exports.act = index.act;
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var THREE = require('three');
|
|
6
|
-
var expoAsset = require('expo-asset');
|
|
7
5
|
var index = require('../../dist/index-4e1c76e5.cjs.prod.js');
|
|
8
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
7
|
var React = require('react');
|
|
10
|
-
var
|
|
8
|
+
var THREE = require('three');
|
|
11
9
|
var reactNative = require('react-native');
|
|
12
10
|
var expoGl = require('expo-gl');
|
|
13
11
|
var Pressability = require('react-native/Libraries/Pressability/Pressability');
|
|
@@ -37,9 +35,8 @@ function _interopNamespace(e) {
|
|
|
37
35
|
return Object.freeze(n);
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
41
38
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
42
|
-
var
|
|
39
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
43
40
|
var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
|
|
44
41
|
|
|
45
42
|
const EVENTS = {
|
|
@@ -125,6 +122,114 @@ function createTouchEvents(store) {
|
|
|
125
122
|
};
|
|
126
123
|
}
|
|
127
124
|
|
|
125
|
+
// Check if expo-asset is installed (available with expo modules)
|
|
126
|
+
let expAsset;
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
var _require;
|
|
130
|
+
|
|
131
|
+
expAsset = (_require = require('expo-asset')) == null ? void 0 : _require.Asset;
|
|
132
|
+
} catch (_) {}
|
|
133
|
+
/**
|
|
134
|
+
* Generates an asset based on input type.
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
function getAsset(input) {
|
|
139
|
+
switch (typeof input) {
|
|
140
|
+
case 'string':
|
|
141
|
+
return expAsset.fromURI(input);
|
|
142
|
+
|
|
143
|
+
case 'number':
|
|
144
|
+
return expAsset.fromModule(input);
|
|
145
|
+
|
|
146
|
+
default:
|
|
147
|
+
throw 'Invalid asset! Must be a URI or module.';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let injected = false;
|
|
152
|
+
function polyfills() {
|
|
153
|
+
if (!expAsset || injected) return;
|
|
154
|
+
injected = true; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
155
|
+
|
|
156
|
+
const extractUrlBase = THREE__namespace.LoaderUtils.extractUrlBase.bind(THREE__namespace.LoaderUtils);
|
|
157
|
+
|
|
158
|
+
THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
const prevTextureLoad = THREE__namespace.TextureLoader.prototype.load;
|
|
162
|
+
|
|
163
|
+
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
164
|
+
const texture = new THREE__namespace.Texture(); // @ts-ignore
|
|
165
|
+
|
|
166
|
+
texture.isDataTexture = true;
|
|
167
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
168
|
+
texture.image = {
|
|
169
|
+
data: asset,
|
|
170
|
+
width: asset.width,
|
|
171
|
+
height: asset.height
|
|
172
|
+
};
|
|
173
|
+
texture.flipY = true;
|
|
174
|
+
texture.unpackAlignment = 1;
|
|
175
|
+
texture.needsUpdate = true;
|
|
176
|
+
onLoad == null ? void 0 : onLoad(texture);
|
|
177
|
+
}).catch(onError);
|
|
178
|
+
return texture;
|
|
179
|
+
}; // Fetches assets via XMLHttpRequest
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
const prevFileLoad = THREE__namespace.FileLoader.prototype.load;
|
|
183
|
+
|
|
184
|
+
THREE__namespace.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
185
|
+
if (this.path) url = this.path + url;
|
|
186
|
+
const request = new XMLHttpRequest();
|
|
187
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
188
|
+
request.open('GET', asset.uri, true);
|
|
189
|
+
request.addEventListener('load', event => {
|
|
190
|
+
if (request.status === 200) {
|
|
191
|
+
onLoad == null ? void 0 : onLoad(request.response);
|
|
192
|
+
this.manager.itemEnd(url);
|
|
193
|
+
} else {
|
|
194
|
+
onError == null ? void 0 : onError(event);
|
|
195
|
+
this.manager.itemError(url);
|
|
196
|
+
this.manager.itemEnd(url);
|
|
197
|
+
}
|
|
198
|
+
}, false);
|
|
199
|
+
request.addEventListener('progress', event => {
|
|
200
|
+
onProgress == null ? void 0 : onProgress(event);
|
|
201
|
+
}, false);
|
|
202
|
+
request.addEventListener('error', event => {
|
|
203
|
+
onError == null ? void 0 : onError(event);
|
|
204
|
+
this.manager.itemError(url);
|
|
205
|
+
this.manager.itemEnd(url);
|
|
206
|
+
}, false);
|
|
207
|
+
request.addEventListener('abort', event => {
|
|
208
|
+
onError == null ? void 0 : onError(event);
|
|
209
|
+
this.manager.itemError(url);
|
|
210
|
+
this.manager.itemEnd(url);
|
|
211
|
+
}, false);
|
|
212
|
+
if (this.responseType) request.responseType = this.responseType;
|
|
213
|
+
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
214
|
+
|
|
215
|
+
for (const header in this.requestHeader) {
|
|
216
|
+
request.setRequestHeader(header, this.requestHeader[header]);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
request.send(null);
|
|
220
|
+
this.manager.itemStart(url);
|
|
221
|
+
});
|
|
222
|
+
return request;
|
|
223
|
+
}; // Cleanup function
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
return () => {
|
|
227
|
+
THREE__namespace.LoaderUtils.extractUrlBase = extractUrlBase;
|
|
228
|
+
THREE__namespace.TextureLoader.prototype.load = prevTextureLoad;
|
|
229
|
+
THREE__namespace.FileLoader.prototype.load = prevFileLoad;
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
128
233
|
/**
|
|
129
234
|
* A native canvas which accepts threejs elements as children.
|
|
130
235
|
* @see https://docs.pmnd.rs/react-three-fiber/api/canvas
|
|
@@ -160,6 +265,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
160
265
|
});
|
|
161
266
|
const [canvas, setCanvas] = React__namespace.useState(null);
|
|
162
267
|
const [bind, setBind] = React__namespace.useState();
|
|
268
|
+
React__namespace.useImperativeHandle(forwardedRef, () => viewRef.current);
|
|
163
269
|
const handlePointerMissed = index.useMutableCallback(onPointerMissed);
|
|
164
270
|
const [block, setBlock] = React__namespace.useState(false);
|
|
165
271
|
const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -168,7 +274,9 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
168
274
|
|
|
169
275
|
if (error) throw error;
|
|
170
276
|
const viewRef = React__namespace.useRef(null);
|
|
171
|
-
const root = React__namespace.useRef(null);
|
|
277
|
+
const root = React__namespace.useRef(null); // Inject and cleanup RN polyfills if able
|
|
278
|
+
|
|
279
|
+
React__namespace.useLayoutEffect(() => polyfills(), []);
|
|
172
280
|
const onLayout = React__namespace.useCallback(e => {
|
|
173
281
|
const {
|
|
174
282
|
width,
|
|
@@ -247,7 +355,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
247
355
|
}
|
|
248
356
|
}, [canvas]);
|
|
249
357
|
return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, props, {
|
|
250
|
-
ref:
|
|
358
|
+
ref: viewRef,
|
|
251
359
|
onLayout: onLayout,
|
|
252
360
|
style: {
|
|
253
361
|
flex: 1,
|
|
@@ -259,89 +367,6 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
|
|
|
259
367
|
}));
|
|
260
368
|
});
|
|
261
369
|
|
|
262
|
-
/**
|
|
263
|
-
* Generates an asset based on input type.
|
|
264
|
-
*/
|
|
265
|
-
|
|
266
|
-
const getAsset = input => {
|
|
267
|
-
if (input instanceof expoAsset.Asset) return input;
|
|
268
|
-
|
|
269
|
-
switch (typeof input) {
|
|
270
|
-
case 'string':
|
|
271
|
-
return expoAsset.Asset.fromURI(input);
|
|
272
|
-
|
|
273
|
-
case 'number':
|
|
274
|
-
return expoAsset.Asset.fromModule(input);
|
|
275
|
-
|
|
276
|
-
default:
|
|
277
|
-
throw 'Invalid asset! Must be a URI or module.';
|
|
278
|
-
}
|
|
279
|
-
}; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const extractUrlBase = THREE__namespace.LoaderUtils.extractUrlBase.bind(THREE__namespace.LoaderUtils);
|
|
283
|
-
|
|
284
|
-
THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
288
|
-
const texture = new THREE__namespace.Texture(); // @ts-ignore
|
|
289
|
-
|
|
290
|
-
texture.isDataTexture = true;
|
|
291
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
292
|
-
texture.image = {
|
|
293
|
-
data: asset,
|
|
294
|
-
width: asset.width,
|
|
295
|
-
height: asset.height
|
|
296
|
-
};
|
|
297
|
-
texture.needsUpdate = true;
|
|
298
|
-
onLoad == null ? void 0 : onLoad(texture);
|
|
299
|
-
}).catch(onError);
|
|
300
|
-
return texture;
|
|
301
|
-
}; // Fetches assets via XMLHttpRequest
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
THREE__namespace.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
305
|
-
if (this.path) url = this.path + url;
|
|
306
|
-
const request = new XMLHttpRequest();
|
|
307
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
308
|
-
request.open('GET', asset.uri, true);
|
|
309
|
-
request.addEventListener('load', event => {
|
|
310
|
-
if (request.status === 200) {
|
|
311
|
-
onLoad == null ? void 0 : onLoad(request.response);
|
|
312
|
-
this.manager.itemEnd(url);
|
|
313
|
-
} else {
|
|
314
|
-
onError == null ? void 0 : onError(event);
|
|
315
|
-
this.manager.itemError(url);
|
|
316
|
-
this.manager.itemEnd(url);
|
|
317
|
-
}
|
|
318
|
-
}, false);
|
|
319
|
-
request.addEventListener('progress', event => {
|
|
320
|
-
onProgress == null ? void 0 : onProgress(event);
|
|
321
|
-
}, false);
|
|
322
|
-
request.addEventListener('error', event => {
|
|
323
|
-
onError == null ? void 0 : onError(event);
|
|
324
|
-
this.manager.itemError(url);
|
|
325
|
-
this.manager.itemEnd(url);
|
|
326
|
-
}, false);
|
|
327
|
-
request.addEventListener('abort', event => {
|
|
328
|
-
onError == null ? void 0 : onError(event);
|
|
329
|
-
this.manager.itemError(url);
|
|
330
|
-
this.manager.itemEnd(url);
|
|
331
|
-
}, false);
|
|
332
|
-
if (this.responseType) request.responseType = this.responseType;
|
|
333
|
-
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
334
|
-
|
|
335
|
-
for (const header in this.requestHeader) {
|
|
336
|
-
request.setRequestHeader(header, this.requestHeader[header]);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
request.send(null);
|
|
340
|
-
this.manager.itemStart(url);
|
|
341
|
-
});
|
|
342
|
-
return request;
|
|
343
|
-
};
|
|
344
|
-
|
|
345
370
|
exports.ReactThreeFiber = index.threeTypes;
|
|
346
371
|
exports._roots = index.roots;
|
|
347
372
|
exports.act = index.act;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { Asset } from 'expo-asset';
|
|
3
1
|
import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from '../../dist/index-136ca0b0.esm.js';
|
|
4
2
|
export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from '../../dist/index-136ca0b0.esm.js';
|
|
5
3
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
6
4
|
import * as React from 'react';
|
|
7
|
-
import
|
|
5
|
+
import * as THREE from 'three';
|
|
8
6
|
import { PixelRatio, View, StyleSheet } from 'react-native';
|
|
9
7
|
import { GLView } from 'expo-gl';
|
|
10
8
|
import Pressability from 'react-native/Libraries/Pressability/Pressability';
|
|
@@ -97,6 +95,114 @@ function createTouchEvents(store) {
|
|
|
97
95
|
};
|
|
98
96
|
}
|
|
99
97
|
|
|
98
|
+
// Check if expo-asset is installed (available with expo modules)
|
|
99
|
+
let expAsset;
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
var _require;
|
|
103
|
+
|
|
104
|
+
expAsset = (_require = require('expo-asset')) == null ? void 0 : _require.Asset;
|
|
105
|
+
} catch (_) {}
|
|
106
|
+
/**
|
|
107
|
+
* Generates an asset based on input type.
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
function getAsset(input) {
|
|
112
|
+
switch (typeof input) {
|
|
113
|
+
case 'string':
|
|
114
|
+
return expAsset.fromURI(input);
|
|
115
|
+
|
|
116
|
+
case 'number':
|
|
117
|
+
return expAsset.fromModule(input);
|
|
118
|
+
|
|
119
|
+
default:
|
|
120
|
+
throw 'Invalid asset! Must be a URI or module.';
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
let injected = false;
|
|
125
|
+
function polyfills() {
|
|
126
|
+
if (!expAsset || injected) return;
|
|
127
|
+
injected = true; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
128
|
+
|
|
129
|
+
const extractUrlBase = THREE.LoaderUtils.extractUrlBase.bind(THREE.LoaderUtils);
|
|
130
|
+
|
|
131
|
+
THREE.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
const prevTextureLoad = THREE.TextureLoader.prototype.load;
|
|
135
|
+
|
|
136
|
+
THREE.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
137
|
+
const texture = new THREE.Texture(); // @ts-ignore
|
|
138
|
+
|
|
139
|
+
texture.isDataTexture = true;
|
|
140
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
141
|
+
texture.image = {
|
|
142
|
+
data: asset,
|
|
143
|
+
width: asset.width,
|
|
144
|
+
height: asset.height
|
|
145
|
+
};
|
|
146
|
+
texture.flipY = true;
|
|
147
|
+
texture.unpackAlignment = 1;
|
|
148
|
+
texture.needsUpdate = true;
|
|
149
|
+
onLoad == null ? void 0 : onLoad(texture);
|
|
150
|
+
}).catch(onError);
|
|
151
|
+
return texture;
|
|
152
|
+
}; // Fetches assets via XMLHttpRequest
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
const prevFileLoad = THREE.FileLoader.prototype.load;
|
|
156
|
+
|
|
157
|
+
THREE.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
158
|
+
if (this.path) url = this.path + url;
|
|
159
|
+
const request = new XMLHttpRequest();
|
|
160
|
+
getAsset(url).downloadAsync().then(asset => {
|
|
161
|
+
request.open('GET', asset.uri, true);
|
|
162
|
+
request.addEventListener('load', event => {
|
|
163
|
+
if (request.status === 200) {
|
|
164
|
+
onLoad == null ? void 0 : onLoad(request.response);
|
|
165
|
+
this.manager.itemEnd(url);
|
|
166
|
+
} else {
|
|
167
|
+
onError == null ? void 0 : onError(event);
|
|
168
|
+
this.manager.itemError(url);
|
|
169
|
+
this.manager.itemEnd(url);
|
|
170
|
+
}
|
|
171
|
+
}, false);
|
|
172
|
+
request.addEventListener('progress', event => {
|
|
173
|
+
onProgress == null ? void 0 : onProgress(event);
|
|
174
|
+
}, false);
|
|
175
|
+
request.addEventListener('error', event => {
|
|
176
|
+
onError == null ? void 0 : onError(event);
|
|
177
|
+
this.manager.itemError(url);
|
|
178
|
+
this.manager.itemEnd(url);
|
|
179
|
+
}, false);
|
|
180
|
+
request.addEventListener('abort', event => {
|
|
181
|
+
onError == null ? void 0 : onError(event);
|
|
182
|
+
this.manager.itemError(url);
|
|
183
|
+
this.manager.itemEnd(url);
|
|
184
|
+
}, false);
|
|
185
|
+
if (this.responseType) request.responseType = this.responseType;
|
|
186
|
+
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
187
|
+
|
|
188
|
+
for (const header in this.requestHeader) {
|
|
189
|
+
request.setRequestHeader(header, this.requestHeader[header]);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
request.send(null);
|
|
193
|
+
this.manager.itemStart(url);
|
|
194
|
+
});
|
|
195
|
+
return request;
|
|
196
|
+
}; // Cleanup function
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
return () => {
|
|
200
|
+
THREE.LoaderUtils.extractUrlBase = extractUrlBase;
|
|
201
|
+
THREE.TextureLoader.prototype.load = prevTextureLoad;
|
|
202
|
+
THREE.FileLoader.prototype.load = prevFileLoad;
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
100
206
|
/**
|
|
101
207
|
* A native canvas which accepts threejs elements as children.
|
|
102
208
|
* @see https://docs.pmnd.rs/react-three-fiber/api/canvas
|
|
@@ -132,6 +238,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
132
238
|
});
|
|
133
239
|
const [canvas, setCanvas] = React.useState(null);
|
|
134
240
|
const [bind, setBind] = React.useState();
|
|
241
|
+
React.useImperativeHandle(forwardedRef, () => viewRef.current);
|
|
135
242
|
const handlePointerMissed = useMutableCallback(onPointerMissed);
|
|
136
243
|
const [block, setBlock] = React.useState(false);
|
|
137
244
|
const [error, setError] = React.useState(false); // Suspend this component if block is a promise (2nd run)
|
|
@@ -140,7 +247,9 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
140
247
|
|
|
141
248
|
if (error) throw error;
|
|
142
249
|
const viewRef = React.useRef(null);
|
|
143
|
-
const root = React.useRef(null);
|
|
250
|
+
const root = React.useRef(null); // Inject and cleanup RN polyfills if able
|
|
251
|
+
|
|
252
|
+
React.useLayoutEffect(() => polyfills(), []);
|
|
144
253
|
const onLayout = React.useCallback(e => {
|
|
145
254
|
const {
|
|
146
255
|
width,
|
|
@@ -219,7 +328,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
219
328
|
}
|
|
220
329
|
}, [canvas]);
|
|
221
330
|
return /*#__PURE__*/React.createElement(View, _extends({}, props, {
|
|
222
|
-
ref:
|
|
331
|
+
ref: viewRef,
|
|
223
332
|
onLayout: onLayout,
|
|
224
333
|
style: {
|
|
225
334
|
flex: 1,
|
|
@@ -231,87 +340,4 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
|
|
|
231
340
|
}));
|
|
232
341
|
});
|
|
233
342
|
|
|
234
|
-
/**
|
|
235
|
-
* Generates an asset based on input type.
|
|
236
|
-
*/
|
|
237
|
-
|
|
238
|
-
const getAsset = input => {
|
|
239
|
-
if (input instanceof Asset) return input;
|
|
240
|
-
|
|
241
|
-
switch (typeof input) {
|
|
242
|
-
case 'string':
|
|
243
|
-
return Asset.fromURI(input);
|
|
244
|
-
|
|
245
|
-
case 'number':
|
|
246
|
-
return Asset.fromModule(input);
|
|
247
|
-
|
|
248
|
-
default:
|
|
249
|
-
throw 'Invalid asset! Must be a URI or module.';
|
|
250
|
-
}
|
|
251
|
-
}; // Don't pre-process urls, let expo-asset generate an absolute URL
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
const extractUrlBase = THREE.LoaderUtils.extractUrlBase.bind(THREE.LoaderUtils);
|
|
255
|
-
|
|
256
|
-
THREE.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './'; // There's no Image in native, so create a data texture instead
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
THREE.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
|
|
260
|
-
const texture = new THREE.Texture(); // @ts-ignore
|
|
261
|
-
|
|
262
|
-
texture.isDataTexture = true;
|
|
263
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
264
|
-
texture.image = {
|
|
265
|
-
data: asset,
|
|
266
|
-
width: asset.width,
|
|
267
|
-
height: asset.height
|
|
268
|
-
};
|
|
269
|
-
texture.needsUpdate = true;
|
|
270
|
-
onLoad == null ? void 0 : onLoad(texture);
|
|
271
|
-
}).catch(onError);
|
|
272
|
-
return texture;
|
|
273
|
-
}; // Fetches assets via XMLHttpRequest
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
THREE.FileLoader.prototype.load = function (url, onLoad, onProgress, onError) {
|
|
277
|
-
if (this.path) url = this.path + url;
|
|
278
|
-
const request = new XMLHttpRequest();
|
|
279
|
-
getAsset(url).downloadAsync().then(asset => {
|
|
280
|
-
request.open('GET', asset.uri, true);
|
|
281
|
-
request.addEventListener('load', event => {
|
|
282
|
-
if (request.status === 200) {
|
|
283
|
-
onLoad == null ? void 0 : onLoad(request.response);
|
|
284
|
-
this.manager.itemEnd(url);
|
|
285
|
-
} else {
|
|
286
|
-
onError == null ? void 0 : onError(event);
|
|
287
|
-
this.manager.itemError(url);
|
|
288
|
-
this.manager.itemEnd(url);
|
|
289
|
-
}
|
|
290
|
-
}, false);
|
|
291
|
-
request.addEventListener('progress', event => {
|
|
292
|
-
onProgress == null ? void 0 : onProgress(event);
|
|
293
|
-
}, false);
|
|
294
|
-
request.addEventListener('error', event => {
|
|
295
|
-
onError == null ? void 0 : onError(event);
|
|
296
|
-
this.manager.itemError(url);
|
|
297
|
-
this.manager.itemEnd(url);
|
|
298
|
-
}, false);
|
|
299
|
-
request.addEventListener('abort', event => {
|
|
300
|
-
onError == null ? void 0 : onError(event);
|
|
301
|
-
this.manager.itemError(url);
|
|
302
|
-
this.manager.itemEnd(url);
|
|
303
|
-
}, false);
|
|
304
|
-
if (this.responseType) request.responseType = this.responseType;
|
|
305
|
-
if (this.withCredentials) request.withCredentials = this.withCredentials;
|
|
306
|
-
|
|
307
|
-
for (const header in this.requestHeader) {
|
|
308
|
-
request.setRequestHeader(header, this.requestHeader[header]);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
request.send(null);
|
|
312
|
-
this.manager.itemStart(url);
|
|
313
|
-
});
|
|
314
|
-
return request;
|
|
315
|
-
};
|
|
316
|
-
|
|
317
343
|
export { Canvas, createTouchEvents as events };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-three/fiber",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.17",
|
|
4
4
|
"description": "A React renderer for Threejs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@babel/runtime": "^7.17.8",
|
|
46
46
|
"@types/react-reconciler": "^0.26.7",
|
|
47
|
-
"react-merge-refs": "^1.1.0",
|
|
48
47
|
"react-reconciler": "^0.27.0",
|
|
49
48
|
"react-use-measure": "^2.1.1",
|
|
50
49
|
"scheduler": "^0.21.0",
|