@react-three/fiber 8.0.15 → 8.0.18
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 +18 -0
- package/dist/declarations/src/core/events.d.ts +69 -69
- package/dist/declarations/src/core/hooks.d.ts +24 -21
- package/dist/declarations/src/core/index.d.ts +60 -60
- package/dist/declarations/src/core/loop.d.ts +13 -13
- package/dist/declarations/src/core/renderer.d.ts +51 -51
- package/dist/declarations/src/core/store.d.ts +92 -92
- package/dist/declarations/src/core/utils.d.ts +82 -81
- package/dist/declarations/src/index.d.ts +10 -10
- package/dist/declarations/src/native/Canvas.d.ts +8 -8
- package/dist/declarations/src/native/events.d.ts +4 -4
- package/dist/declarations/src/native/polyfills.d.ts +1 -0
- package/dist/declarations/src/native.d.ts +10 -10
- package/dist/declarations/src/three-types.d.ts +329 -329
- package/dist/declarations/src/web/Canvas.d.ts +9 -9
- package/dist/declarations/src/web/events.d.ts +4 -4
- package/dist/{index-208291a3.esm.js → index-acedf326.esm.js} +27 -30
- package/dist/{index-606d3385.cjs.dev.js → index-c937c162.cjs.dev.js} +27 -30
- package/dist/{index-05d06e15.cjs.prod.js → index-e2e71da1.cjs.prod.js} +27 -30
- package/dist/react-three-fiber.cjs.dev.js +14 -9
- package/dist/react-three-fiber.cjs.prod.js +14 -9
- package/dist/react-three-fiber.esm.js +15 -9
- package/native/dist/react-three-fiber-native.cjs.dev.js +116 -91
- package/native/dist/react-three-fiber-native.cjs.prod.js +116 -91
- package/native/dist/react-three-fiber-native.esm.js +116 -90
- package/package.json +2 -3
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
var expoAsset = require('expo-asset');
|
|
7
|
-
var index = require('../../dist/index-606d3385.cjs.dev.js');
|
|
5
|
+
var index = require('../../dist/index-c937c162.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
|
|
6
|
-
var expoAsset = require('expo-asset');
|
|
7
|
-
var index = require('../../dist/index-05d06e15.cjs.prod.js');
|
|
5
|
+
var index = require('../../dist/index-e2e71da1.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;
|