@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.
@@ -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
- 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 mergeRefs = require('react-merge-refs');
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 mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
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: mergeRefs__default["default"]([viewRef, forwardedRef]),
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
- 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 mergeRefs = require('react-merge-refs');
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 mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
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: mergeRefs__default["default"]([viewRef, forwardedRef]),
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;