@react-three/fiber 9.0.0-rc.5 → 9.0.0-rc.7

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +1088 -1076
  2. package/dist/declarations/src/core/events.d.ts +91 -91
  3. package/dist/declarations/src/core/hooks.d.ts +51 -51
  4. package/dist/declarations/src/core/index.d.ts +13 -13
  5. package/dist/declarations/src/core/loop.d.ts +31 -31
  6. package/dist/declarations/src/core/reconciler.d.ts +50 -52
  7. package/dist/declarations/src/core/renderer.d.ts +89 -89
  8. package/dist/declarations/src/core/store.d.ts +130 -130
  9. package/dist/declarations/src/core/utils.d.ts +186 -186
  10. package/dist/declarations/src/index.d.ts +6 -6
  11. package/dist/declarations/src/native/Canvas.d.ts +13 -13
  12. package/dist/declarations/src/native/events.d.ts +4 -4
  13. package/dist/declarations/src/native.d.ts +6 -6
  14. package/dist/declarations/src/three-types.d.ts +66 -62
  15. package/dist/declarations/src/web/Canvas.d.ts +23 -23
  16. package/dist/declarations/src/web/events.d.ts +4 -4
  17. package/dist/{events-a7b08b1a.esm.js → events-12fa3319.esm.js} +138 -118
  18. package/dist/{events-b4061ace.cjs.dev.js → events-56f909a9.cjs.dev.js} +138 -118
  19. package/dist/{events-60ed2d7b.cjs.prod.js → events-858f07e7.cjs.prod.js} +138 -118
  20. package/dist/react-three-fiber.cjs.dev.js +7 -201
  21. package/dist/react-three-fiber.cjs.prod.js +7 -201
  22. package/dist/react-three-fiber.esm.js +6 -201
  23. package/native/dist/react-three-fiber-native.cjs.d.ts +2 -0
  24. package/native/dist/react-three-fiber-native.cjs.dev.js +554 -0
  25. package/native/dist/react-three-fiber-native.cjs.js +7 -0
  26. package/native/dist/react-three-fiber-native.cjs.prod.js +554 -0
  27. package/native/dist/react-three-fiber-native.esm.js +502 -0
  28. package/native/package.json +5 -5
  29. package/package.json +87 -88
  30. package/readme.md +253 -253
  31. package/dist/declarations/src/web/use-measure.d.ts +0 -34
@@ -0,0 +1,502 @@
1
+ import { e as extend, u as useBridge, a as useMutableCallback, c as createRoot, b as useIsomorphicLayoutEffect, E as ErrorBoundary, B as Block, d as unmountComponentAtNode, f as createPointerEvents, g as createEvents } from '../../dist/events-12fa3319.esm.js';
2
+ export { t as ReactThreeFiber, _ as _roots, w as act, k as addAfterEffect, j as addEffect, l as addTail, n as advance, q as applyProps, x as buildGraph, p as context, g as createEvents, o as createPortal, c as createRoot, v as dispose, e as extend, h as flushGlobalEffects, s as getRootState, m as invalidate, r as reconciler, d as unmountComponentAtNode, C as useFrame, D as useGraph, y as useInstanceHandle, F as useLoader, z as useStore, A as useThree } from '../../dist/events-12fa3319.esm.js';
3
+ import * as React from 'react';
4
+ import * as THREE from 'three';
5
+ import { PanResponder, PixelRatio, StyleSheet, View, Platform, Image, NativeModules } from 'react-native';
6
+ import { GLView } from 'expo-gl';
7
+ import { FiberProvider } from 'its-fine';
8
+ import { jsx } from 'react/jsx-runtime';
9
+ import { Asset } from 'expo-asset';
10
+ import * as fs from 'expo-file-system';
11
+ import { fromByteArray } from 'base64-js';
12
+ import { Buffer } from 'buffer';
13
+ import 'react-reconciler/constants';
14
+ import 'zustand/traditional';
15
+ import 'react-reconciler';
16
+ import 'scheduler';
17
+ import 'suspend-react';
18
+
19
+ // TODO: React 19 needs support from react-native
20
+ const _View = View;
21
+ function CanvasImpl({
22
+ children,
23
+ style,
24
+ gl,
25
+ events = createPointerEvents,
26
+ shadows,
27
+ linear,
28
+ flat,
29
+ legacy,
30
+ orthographic,
31
+ frameloop,
32
+ performance,
33
+ raycaster,
34
+ camera,
35
+ scene,
36
+ onPointerMissed,
37
+ onCreated,
38
+ ref,
39
+ ...props
40
+ }) {
41
+ // Create a known catalogue of Threejs-native elements
42
+ // This will include the entire THREE namespace by default, users can extend
43
+ // their own elements by using the createRoot API instead
44
+ React.useMemo(() => extend(THREE), []);
45
+ const Bridge = useBridge();
46
+ const [{
47
+ width,
48
+ height,
49
+ top,
50
+ left
51
+ }, setSize] = React.useState({
52
+ width: 0,
53
+ height: 0,
54
+ top: 0,
55
+ left: 0
56
+ });
57
+ const [canvas, setCanvas] = React.useState(null);
58
+ const [bind, setBind] = React.useState();
59
+ React.useImperativeHandle(ref, () => viewRef.current);
60
+ const handlePointerMissed = useMutableCallback(onPointerMissed);
61
+ const [block, setBlock] = React.useState(false);
62
+ const [error, setError] = React.useState(undefined);
63
+
64
+ // Suspend this component if block is a promise (2nd run)
65
+ if (block) throw block;
66
+ // Throw exception outwards if anything within canvas throws
67
+ if (error) throw error;
68
+ const viewRef = React.useRef(null);
69
+ const root = React.useRef(null);
70
+ const [antialias, setAntialias] = React.useState(true);
71
+ const onLayout = React.useCallback(e => {
72
+ const {
73
+ width,
74
+ height,
75
+ x,
76
+ y
77
+ } = e.nativeEvent.layout;
78
+ setSize({
79
+ width,
80
+ height,
81
+ top: y,
82
+ left: x
83
+ });
84
+ }, []);
85
+
86
+ // Called on context create or swap
87
+ // https://github.com/pmndrs/react-three-fiber/pull/2297
88
+ const onContextCreate = React.useCallback(context => {
89
+ const listeners = new Map();
90
+ const canvas = {
91
+ style: {},
92
+ width: context.drawingBufferWidth,
93
+ height: context.drawingBufferHeight,
94
+ clientWidth: context.drawingBufferWidth,
95
+ clientHeight: context.drawingBufferHeight,
96
+ getContext: (_, {
97
+ antialias = false
98
+ }) => {
99
+ setAntialias(antialias);
100
+ return context;
101
+ },
102
+ addEventListener(type, listener) {
103
+ let callbacks = listeners.get(type);
104
+ if (!callbacks) {
105
+ callbacks = [];
106
+ listeners.set(type, callbacks);
107
+ }
108
+ callbacks.push(listener);
109
+ },
110
+ removeEventListener(type, listener) {
111
+ const callbacks = listeners.get(type);
112
+ if (callbacks) {
113
+ const index = callbacks.indexOf(listener);
114
+ if (index !== -1) callbacks.splice(index, 1);
115
+ }
116
+ },
117
+ dispatchEvent(event) {
118
+ Object.assign(event, {
119
+ target: this
120
+ });
121
+ const callbacks = listeners.get(event.type);
122
+ if (callbacks) {
123
+ for (const callback of callbacks) {
124
+ callback(event);
125
+ }
126
+ }
127
+ },
128
+ setPointerCapture() {
129
+ // TODO
130
+ },
131
+ releasePointerCapture() {
132
+ // TODO
133
+ }
134
+ };
135
+
136
+ // TODO: this is wrong but necessary to trick controls
137
+ // @ts-ignore
138
+ canvas.ownerDocument = canvas;
139
+ canvas.getRootNode = () => canvas;
140
+ root.current = createRoot(canvas);
141
+ setCanvas(canvas);
142
+ function handleTouch(gestureEvent, type) {
143
+ gestureEvent.persist();
144
+ canvas.dispatchEvent(Object.assign(gestureEvent.nativeEvent, {
145
+ type,
146
+ offsetX: gestureEvent.nativeEvent.locationX,
147
+ offsetY: gestureEvent.nativeEvent.locationY,
148
+ pointerType: 'touch',
149
+ pointerId: gestureEvent.nativeEvent.identifier
150
+ }));
151
+ return true;
152
+ }
153
+ const responder = PanResponder.create({
154
+ onStartShouldSetPanResponder: () => true,
155
+ onMoveShouldSetPanResponder: () => true,
156
+ onMoveShouldSetPanResponderCapture: () => true,
157
+ onPanResponderTerminationRequest: () => true,
158
+ onStartShouldSetPanResponderCapture: e => handleTouch(e, 'pointercapture'),
159
+ onPanResponderStart: e => handleTouch(e, 'pointerdown'),
160
+ onPanResponderMove: e => handleTouch(e, 'pointermove'),
161
+ onPanResponderEnd: (e, state) => {
162
+ handleTouch(e, 'pointerup');
163
+ if (Math.hypot(state.dx, state.dy) < 20) handleTouch(e, 'click');
164
+ },
165
+ onPanResponderRelease: e => handleTouch(e, 'pointerleave'),
166
+ onPanResponderTerminate: e => handleTouch(e, 'lostpointercapture'),
167
+ onPanResponderReject: e => handleTouch(e, 'lostpointercapture')
168
+ });
169
+ setBind(responder.panHandlers);
170
+ }, []);
171
+ useIsomorphicLayoutEffect(() => {
172
+ if (root.current && width > 0 && height > 0) {
173
+ async function run() {
174
+ await root.current.configure({
175
+ gl,
176
+ events,
177
+ shadows,
178
+ linear,
179
+ flat,
180
+ legacy,
181
+ orthographic,
182
+ frameloop,
183
+ performance,
184
+ raycaster,
185
+ camera,
186
+ scene,
187
+ // expo-gl can only render at native dpr/resolution
188
+ // https://github.com/expo/expo-three/issues/39
189
+ dpr: PixelRatio.get(),
190
+ size: {
191
+ width,
192
+ height,
193
+ top,
194
+ left
195
+ },
196
+ // Pass mutable reference to onPointerMissed so it's free to update
197
+ onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),
198
+ // Overwrite onCreated to apply RN bindings
199
+ onCreated: state => {
200
+ // Bind render to RN bridge
201
+ const context = state.gl.getContext();
202
+ const renderFrame = state.gl.render.bind(state.gl);
203
+ state.gl.render = (scene, camera) => {
204
+ renderFrame(scene, camera);
205
+ context.endFrameEXP();
206
+ };
207
+ return onCreated == null ? void 0 : onCreated(state);
208
+ }
209
+ });
210
+ root.current.render( /*#__PURE__*/jsx(Bridge, {
211
+ children: /*#__PURE__*/jsx(ErrorBoundary, {
212
+ set: setError,
213
+ children: /*#__PURE__*/jsx(React.Suspense, {
214
+ fallback: /*#__PURE__*/jsx(Block, {
215
+ set: setBlock
216
+ }),
217
+ children: children
218
+ })
219
+ })
220
+ }));
221
+ }
222
+ run();
223
+ }
224
+ });
225
+ React.useEffect(() => {
226
+ if (canvas) {
227
+ return () => unmountComponentAtNode(canvas);
228
+ }
229
+ }, [canvas]);
230
+ return /*#__PURE__*/jsx(_View, {
231
+ ...props,
232
+ ref: viewRef,
233
+ onLayout: onLayout,
234
+ style: {
235
+ flex: 1,
236
+ ...style
237
+ },
238
+ ...bind,
239
+ children: width > 0 && /*#__PURE__*/jsx(GLView, {
240
+ msaaSamples: antialias ? 4 : 0,
241
+ onContextCreate: onContextCreate,
242
+ style: StyleSheet.absoluteFill
243
+ })
244
+ });
245
+ }
246
+
247
+ /**
248
+ * A native canvas which accepts threejs elements as children.
249
+ * @see https://docs.pmnd.rs/react-three-fiber/api/canvas
250
+ */
251
+ function Canvas(props) {
252
+ return /*#__PURE__*/jsx(FiberProvider, {
253
+ children: /*#__PURE__*/jsx(CanvasImpl, {
254
+ ...props
255
+ })
256
+ });
257
+ }
258
+
259
+ /** Default R3F event manager for react-native */
260
+ function createTouchEvents(store) {
261
+ const {
262
+ handlePointer
263
+ } = createEvents(store);
264
+ const handleTouch = (event, name) => {
265
+ event.persist()
266
+
267
+ // Apply offset
268
+ ;
269
+ event.nativeEvent.offsetX = event.nativeEvent.locationX;
270
+ event.nativeEvent.offsetY = event.nativeEvent.locationY;
271
+
272
+ // Emulate DOM event
273
+ const callback = handlePointer(name);
274
+ callback(event.nativeEvent);
275
+ return true;
276
+ };
277
+ const responder = PanResponder.create({
278
+ onStartShouldSetPanResponder: () => true,
279
+ onMoveShouldSetPanResponder: () => true,
280
+ onMoveShouldSetPanResponderCapture: () => true,
281
+ onPanResponderTerminationRequest: () => true,
282
+ onStartShouldSetPanResponderCapture: e => handleTouch(e, 'onPointerCapture'),
283
+ onPanResponderStart: e => handleTouch(e, 'onPointerDown'),
284
+ onPanResponderMove: e => handleTouch(e, 'onPointerMove'),
285
+ onPanResponderEnd: (e, state) => {
286
+ handleTouch(e, 'onPointerUp');
287
+ if (Math.hypot(state.dx, state.dy) < 20) handleTouch(e, 'onClick');
288
+ },
289
+ onPanResponderRelease: e => handleTouch(e, 'onPointerLeave'),
290
+ onPanResponderTerminate: e => handleTouch(e, 'onLostPointerCapture'),
291
+ onPanResponderReject: e => handleTouch(e, 'onLostPointerCapture')
292
+ });
293
+ return {
294
+ priority: 1,
295
+ enabled: true,
296
+ compute(event, state, previous) {
297
+ // https://github.com/pmndrs/react-three-fiber/pull/782
298
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
299
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
300
+ state.raycaster.setFromCamera(state.pointer, state.camera);
301
+ },
302
+ connected: undefined,
303
+ handlers: responder.panHandlers,
304
+ update: () => {
305
+ var _internal$lastEvent;
306
+ const {
307
+ events,
308
+ internal
309
+ } = store.getState();
310
+ if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) {
311
+ handlePointer('onPointerMove')(internal.lastEvent.current);
312
+ }
313
+ },
314
+ connect: () => {
315
+ const {
316
+ set,
317
+ events
318
+ } = store.getState();
319
+ events.disconnect == null ? void 0 : events.disconnect();
320
+ set(state => ({
321
+ events: {
322
+ ...state.events,
323
+ connected: true
324
+ }
325
+ }));
326
+ },
327
+ disconnect: () => {
328
+ const {
329
+ set
330
+ } = store.getState();
331
+ set(state => ({
332
+ events: {
333
+ ...state.events,
334
+ connected: false
335
+ }
336
+ }));
337
+ }
338
+ };
339
+ }
340
+
341
+ // http://stackoverflow.com/questions/105034
342
+ function uuidv4() {
343
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
344
+ const r = Math.random() * 16 | 0,
345
+ v = c == 'x' ? r : r & 0x3 | 0x8;
346
+ return v.toString(16);
347
+ });
348
+ }
349
+ async function getAsset(input) {
350
+ if (typeof input === 'string') {
351
+ var _NativeModules$BlobMo;
352
+ // Don't process storage
353
+ if (input.startsWith('file:')) return input;
354
+
355
+ // Unpack Blobs from react-native BlobManager
356
+ // https://github.com/facebook/react-native/issues/22681#issuecomment-523258955
357
+ if (input.startsWith('blob:') || input.startsWith((_NativeModules$BlobMo = NativeModules.BlobModule) == null ? void 0 : _NativeModules$BlobMo.BLOB_URI_SCHEME)) {
358
+ const blob = await new Promise((res, rej) => {
359
+ const xhr = new XMLHttpRequest();
360
+ xhr.open('GET', input);
361
+ xhr.responseType = 'blob';
362
+ xhr.onload = () => res(xhr.response);
363
+ xhr.onerror = rej;
364
+ xhr.send();
365
+ });
366
+ const data = await new Promise((res, rej) => {
367
+ const reader = new FileReader();
368
+ reader.onload = () => res(reader.result);
369
+ reader.onerror = rej;
370
+ reader.readAsText(blob);
371
+ });
372
+ input = `data:${blob.type};base64,${data}`;
373
+ }
374
+
375
+ // Create safe URI for JSI serialization
376
+ if (input.startsWith('data:')) {
377
+ const [header, data] = input.split(';base64,');
378
+ const [, type] = header.split('/');
379
+ const uri = fs.cacheDirectory + uuidv4() + `.${type}`;
380
+ await fs.writeAsStringAsync(uri, data, {
381
+ encoding: fs.EncodingType.Base64
382
+ });
383
+ return uri;
384
+ }
385
+ }
386
+
387
+ // Download bundler module or external URL
388
+ const asset = await Asset.fromModule(input).downloadAsync();
389
+ let uri = asset.localUri || asset.uri;
390
+
391
+ // Unpack assets in Android Release Mode
392
+ if (!uri.includes(':')) {
393
+ const file = `${fs.cacheDirectory}ExponentAsset-${asset.hash}.${asset.type}`;
394
+ await fs.copyAsync({
395
+ from: uri,
396
+ to: file
397
+ });
398
+ uri = file;
399
+ }
400
+ return uri;
401
+ }
402
+ function polyfills() {
403
+ // Patch Blob for ArrayBuffer and URL if unsupported
404
+ // https://github.com/facebook/react-native/pull/39276
405
+ // https://github.com/pmndrs/react-three-fiber/issues/3058
406
+ if (Platform.OS !== 'web') {
407
+ try {
408
+ const blob = new Blob([new ArrayBuffer(4)]);
409
+ const url = URL.createObjectURL(blob);
410
+ URL.revokeObjectURL(url);
411
+ } catch (_) {
412
+ const BlobManager = require('react-native/Libraries/Blob/BlobManager.js');
413
+ const createObjectURL = URL.createObjectURL;
414
+ URL.createObjectURL = function (blob) {
415
+ if (blob.data._base64) {
416
+ return `data:${blob.type};base64,${blob.data._base64}`;
417
+ }
418
+ return createObjectURL(blob);
419
+ };
420
+ const createFromParts = BlobManager.createFromParts;
421
+ BlobManager.createFromParts = function (parts, options) {
422
+ parts = parts.map(part => {
423
+ if (part instanceof ArrayBuffer || ArrayBuffer.isView(part)) {
424
+ part = fromByteArray(new Uint8Array(part));
425
+ }
426
+ return part;
427
+ });
428
+ const blob = createFromParts(parts, options);
429
+
430
+ // Always enable slow but safe path for iOS (previously for Android unauth)
431
+ // https://github.com/pmndrs/react-three-fiber/issues/3075
432
+ // if (!NativeModules.BlobModule?.BLOB_URI_SCHEME) {
433
+ blob.data._base64 = '';
434
+ for (const part of parts) {
435
+ var _data$_base, _data;
436
+ blob.data._base64 += (_data$_base = (_data = part.data) == null ? void 0 : _data._base64) != null ? _data$_base : part;
437
+ }
438
+ // }
439
+
440
+ return blob;
441
+ };
442
+ }
443
+ }
444
+
445
+ // Don't pre-process urls, let expo-asset generate an absolute URL
446
+ const extractUrlBase = THREE.LoaderUtils.extractUrlBase.bind(THREE.LoaderUtils);
447
+ THREE.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBase(url) : './';
448
+
449
+ // There's no Image in native, so create a data texture instead
450
+ THREE.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
451
+ if (this.path && typeof url === 'string') url = this.path + url;
452
+ const texture = new THREE.Texture();
453
+ getAsset(url).then(async uri => {
454
+ // https://github.com/expo/expo-three/pull/266
455
+ const {
456
+ width,
457
+ height
458
+ } = await new Promise((res, rej) => Image.getSize(uri, (width, height) => res({
459
+ width,
460
+ height
461
+ }), rej));
462
+ texture.image = {
463
+ // Special case for EXGLImageUtils::loadImage
464
+ data: {
465
+ localUri: uri
466
+ },
467
+ width,
468
+ height
469
+ };
470
+ texture.flipY = true; // Since expo-gl@12.4.0
471
+ texture.needsUpdate = true;
472
+
473
+ // Force non-DOM upload for EXGL texImage2D
474
+ // @ts-expect-error
475
+ texture.isDataTexture = true;
476
+ onLoad == null ? void 0 : onLoad(texture);
477
+ }).catch(onError);
478
+ return texture;
479
+ };
480
+
481
+ // Fetches assets via FS
482
+ THREE.FileLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
483
+ if (this.path && typeof url === 'string') url = this.path + url;
484
+ this.manager.itemStart(url);
485
+ getAsset(url).then(async uri => {
486
+ const base64 = await fs.readAsStringAsync(uri, {
487
+ encoding: fs.EncodingType.Base64
488
+ });
489
+ const data = Buffer.from(base64, 'base64');
490
+ onLoad == null ? void 0 : onLoad(data.buffer);
491
+ }).catch(error => {
492
+ onError == null ? void 0 : onError(error);
493
+ this.manager.itemError(url);
494
+ }).finally(() => {
495
+ this.manager.itemEnd(url);
496
+ });
497
+ };
498
+ }
499
+
500
+ if (Platform.OS !== 'web') polyfills();
501
+
502
+ export { Canvas, createTouchEvents as events };
@@ -1,5 +1,5 @@
1
- {
2
- "main": "dist/react-three-fiber-native.cjs.js",
3
- "module": "dist/react-three-fiber-native.esm.js",
4
- "types": "dist/react-three-fiber-native.cjs.d.ts"
5
- }
1
+ {
2
+ "main": "dist/react-three-fiber-native.cjs.js",
3
+ "module": "dist/react-three-fiber-native.esm.js",
4
+ "types": "dist/react-three-fiber-native.cjs.d.ts"
5
+ }
package/package.json CHANGED
@@ -1,88 +1,87 @@
1
- {
2
- "name": "@react-three/fiber",
3
- "version": "9.0.0-rc.5",
4
- "description": "A React renderer for Threejs",
5
- "keywords": [
6
- "react",
7
- "renderer",
8
- "fiber",
9
- "three",
10
- "threejs"
11
- ],
12
- "author": "Paul Henschel (https://github.com/drcmda)",
13
- "license": "MIT",
14
- "maintainers": [
15
- "Josh Ellis (https://github.com/joshuaellis)",
16
- "Cody Bennett (https://github.com/codyjasonbennett)"
17
- ],
18
- "bugs": {
19
- "url": "https://github.com/pmndrs/react-three-fiber/issues"
20
- },
21
- "homepage": "https://github.com/pmndrs/react-three-fiber#readme",
22
- "repository": {
23
- "type": "git",
24
- "url": "git+https://github.com/pmndrs/react-three-fiber.git"
25
- },
26
- "collective": {
27
- "type": "opencollective",
28
- "url": "https://opencollective.com/react-three-fiber"
29
- },
30
- "main": "dist/react-three-fiber.cjs.js",
31
- "module": "dist/react-three-fiber.esm.js",
32
- "types": "dist/react-three-fiber.cjs.d.ts",
33
- "react-native": "native/dist/react-three-fiber-native.cjs.js",
34
- "sideEffects": false,
35
- "preconstruct": {
36
- "entrypoints": [
37
- "index.tsx",
38
- "native.tsx"
39
- ]
40
- },
41
- "scripts": {
42
- "prebuild": "cp ../../readme.md readme.md"
43
- },
44
- "dependencies": {
45
- "@babel/runtime": "^7.17.8",
46
- "@types/debounce": "^1.2.1",
47
- "@types/react-reconciler": "^0.28.8",
48
- "@types/webxr": "*",
49
- "base64-js": "^1.5.1",
50
- "buffer": "^6.0.3",
51
- "debounce": "^1.2.1",
52
- "its-fine": "^1.2.5",
53
- "react-reconciler": "0.31.0",
54
- "scheduler": "0.25.0",
55
- "suspend-react": "^0.1.3",
56
- "zustand": "^4.1.2"
57
- },
58
- "peerDependencies": {
59
- "expo": ">=43.0",
60
- "expo-asset": ">=8.4",
61
- "expo-gl": ">=11.0",
62
- "expo-file-system": ">=11.0",
63
- "react": "^19.0.0",
64
- "react-dom": "^19.0.0",
65
- "react-native": ">=0.78",
66
- "three": ">=0.156"
67
- },
68
- "peerDependenciesMeta": {
69
- "react-dom": {
70
- "optional": true
71
- },
72
- "react-native": {
73
- "optional": true
74
- },
75
- "expo": {
76
- "optional": true
77
- },
78
- "expo-asset": {
79
- "optional": true
80
- },
81
- "expo-file-system": {
82
- "optional": true
83
- },
84
- "expo-gl": {
85
- "optional": true
86
- }
87
- }
88
- }
1
+ {
2
+ "name": "@react-three/fiber",
3
+ "version": "9.0.0-rc.7",
4
+ "description": "A React renderer for Threejs",
5
+ "keywords": [
6
+ "react",
7
+ "renderer",
8
+ "fiber",
9
+ "three",
10
+ "threejs"
11
+ ],
12
+ "author": "Paul Henschel (https://github.com/drcmda)",
13
+ "license": "MIT",
14
+ "maintainers": [
15
+ "Josh Ellis (https://github.com/joshuaellis)",
16
+ "Cody Bennett (https://github.com/codyjasonbennett)"
17
+ ],
18
+ "bugs": {
19
+ "url": "https://github.com/pmndrs/react-three-fiber/issues"
20
+ },
21
+ "homepage": "https://github.com/pmndrs/react-three-fiber#readme",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/pmndrs/react-three-fiber.git"
25
+ },
26
+ "collective": {
27
+ "type": "opencollective",
28
+ "url": "https://opencollective.com/react-three-fiber"
29
+ },
30
+ "main": "dist/react-three-fiber.cjs.js",
31
+ "module": "dist/react-three-fiber.esm.js",
32
+ "types": "dist/react-three-fiber.cjs.d.ts",
33
+ "react-native": "native/dist/react-three-fiber-native.cjs.js",
34
+ "sideEffects": false,
35
+ "preconstruct": {
36
+ "entrypoints": [
37
+ "index.tsx",
38
+ "native.tsx"
39
+ ]
40
+ },
41
+ "scripts": {
42
+ "prebuild": "cp ../../readme.md readme.md"
43
+ },
44
+ "dependencies": {
45
+ "@babel/runtime": "^7.17.8",
46
+ "@types/react-reconciler": "^0.28.8",
47
+ "@types/webxr": "*",
48
+ "base64-js": "^1.5.1",
49
+ "buffer": "^6.0.3",
50
+ "its-fine": "^1.2.5",
51
+ "react-reconciler": "0.31.0",
52
+ "react-use-measure": "^2.1.7",
53
+ "scheduler": "0.25.0",
54
+ "suspend-react": "^0.1.3",
55
+ "zustand": "^4.1.2"
56
+ },
57
+ "peerDependencies": {
58
+ "expo": ">=43.0",
59
+ "expo-asset": ">=8.4",
60
+ "expo-gl": ">=11.0",
61
+ "expo-file-system": ">=11.0",
62
+ "react": "^19.0.0",
63
+ "react-dom": "^19.0.0",
64
+ "react-native": ">=0.78",
65
+ "three": ">=0.156"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "react-dom": {
69
+ "optional": true
70
+ },
71
+ "react-native": {
72
+ "optional": true
73
+ },
74
+ "expo": {
75
+ "optional": true
76
+ },
77
+ "expo-asset": {
78
+ "optional": true
79
+ },
80
+ "expo-file-system": {
81
+ "optional": true
82
+ },
83
+ "expo-gl": {
84
+ "optional": true
85
+ }
86
+ }
87
+ }