@react-three/fiber 8.0.0-beta.4 → 8.0.0-beta.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.
@@ -2,17 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-2b21ab4b.cjs.dev.js');
5
+ var index = require('./index-8ce56249.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
9
  var mergeRefs = require('react-merge-refs');
10
10
  var useMeasure = require('react-use-measure');
11
- require('suspend-react');
12
11
  require('react-reconciler/constants');
13
12
  require('zustand');
14
13
  require('react-reconciler');
15
14
  require('scheduler');
15
+ require('suspend-react');
16
16
 
17
17
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
18
18
 
@@ -58,7 +58,17 @@ function createPointerEvents(store) {
58
58
  handlePointer
59
59
  } = index.createEvents(store);
60
60
  return {
61
- connected: false,
61
+ priority: 1,
62
+ enabled: true,
63
+
64
+ compute(event, state, previous) {
65
+ // https://github.com/pmndrs/react-three-fiber/pull/782
66
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
67
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
68
+ state.raycaster.setFromCamera(state.pointer, state.camera);
69
+ },
70
+
71
+ connected: undefined,
62
72
  handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({ ...acc,
63
73
  [key]: handlePointer(key)
64
74
  }), {}),
@@ -99,7 +109,7 @@ function createPointerEvents(store) {
99
109
  });
100
110
  set(state => ({
101
111
  events: { ...state.events,
102
- connected: false
112
+ connected: undefined
103
113
  }
104
114
  }));
105
115
  }
@@ -153,6 +163,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
153
163
  // This will include the entire THREE namespace by default, users can extend
154
164
  // their own elements by using the createRoot API instead
155
165
  React__namespace.useMemo(() => index.extend(THREE__namespace), []);
166
+ const onPointerMissed = index.useMemoizedFn(props.onPointerMissed);
156
167
  const [containerRef, {
157
168
  width,
158
169
  height
@@ -164,10 +175,15 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
164
175
  },
165
176
  ...resize
166
177
  });
178
+ const meshRef = React__namespace.useRef(null);
167
179
  const canvasRef = React__namespace.useRef(null);
168
180
  const [canvas, setCanvas] = React__namespace.useState(null);
169
- const canvasProps = index.pick(props, CANVAS_PROPS);
170
- const divProps = index.omit(props, CANVAS_PROPS);
181
+ const canvasProps = index.pick({ ...props,
182
+ onPointerMissed
183
+ }, CANVAS_PROPS);
184
+ const divProps = index.omit({ ...props,
185
+ onPointerMissed
186
+ }, CANVAS_PROPS);
171
187
  const [block, setBlock] = React__namespace.useState(false);
172
188
  const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
173
189
 
@@ -179,6 +195,10 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
179
195
  if (width > 0 && height > 0 && canvas) {
180
196
  if (!root.current) root.current = index.createRoot(canvas);
181
197
  root.current.configure({ ...canvasProps,
198
+ onCreated: state => {
199
+ state.events.connect == null ? void 0 : state.events.connect(meshRef.current);
200
+ canvasProps.onCreated == null ? void 0 : canvasProps.onCreated(state);
201
+ },
182
202
  size: {
183
203
  width,
184
204
  height
@@ -201,7 +221,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
201
221
  return () => index.unmountComponentAtNode(canvas);
202
222
  }, [canvas]);
203
223
  return /*#__PURE__*/React__namespace.createElement("div", _extends({
204
- ref: containerRef,
224
+ ref: mergeRefs__default['default']([meshRef, containerRef]),
205
225
  style: {
206
226
  position: 'relative',
207
227
  width: '100%',
@@ -230,6 +250,7 @@ exports.createPortal = index.createPortal;
230
250
  exports.createRoot = index.createRoot;
231
251
  exports.dispose = index.dispose;
232
252
  exports.extend = index.extend;
253
+ exports.getRootState = index.getRootState;
233
254
  exports.invalidate = index.invalidate;
234
255
  exports.reconciler = index.reconciler;
235
256
  exports.render = index.render;
@@ -237,6 +258,7 @@ exports.unmountComponentAtNode = index.unmountComponentAtNode;
237
258
  exports.useFrame = index.useFrame;
238
259
  exports.useGraph = index.useGraph;
239
260
  exports.useLoader = index.useLoader;
261
+ exports.useMemoizedFn = index.useMemoizedFn;
240
262
  exports.useStore = index.useStore;
241
263
  exports.useThree = index.useThree;
242
264
  exports.Canvas = Canvas;
@@ -2,17 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-a9d2810c.cjs.prod.js');
5
+ var index = require('./index-2d224292.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
9
  var mergeRefs = require('react-merge-refs');
10
10
  var useMeasure = require('react-use-measure');
11
- require('suspend-react');
12
11
  require('react-reconciler/constants');
13
12
  require('zustand');
14
13
  require('react-reconciler');
15
14
  require('scheduler');
15
+ require('suspend-react');
16
16
 
17
17
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
18
18
 
@@ -58,7 +58,17 @@ function createPointerEvents(store) {
58
58
  handlePointer
59
59
  } = index.createEvents(store);
60
60
  return {
61
- connected: false,
61
+ priority: 1,
62
+ enabled: true,
63
+
64
+ compute(event, state, previous) {
65
+ // https://github.com/pmndrs/react-three-fiber/pull/782
66
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
67
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
68
+ state.raycaster.setFromCamera(state.pointer, state.camera);
69
+ },
70
+
71
+ connected: undefined,
62
72
  handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({ ...acc,
63
73
  [key]: handlePointer(key)
64
74
  }), {}),
@@ -99,7 +109,7 @@ function createPointerEvents(store) {
99
109
  });
100
110
  set(state => ({
101
111
  events: { ...state.events,
102
- connected: false
112
+ connected: undefined
103
113
  }
104
114
  }));
105
115
  }
@@ -153,6 +163,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
153
163
  // This will include the entire THREE namespace by default, users can extend
154
164
  // their own elements by using the createRoot API instead
155
165
  React__namespace.useMemo(() => index.extend(THREE__namespace), []);
166
+ const onPointerMissed = index.useMemoizedFn(props.onPointerMissed);
156
167
  const [containerRef, {
157
168
  width,
158
169
  height
@@ -164,10 +175,15 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
164
175
  },
165
176
  ...resize
166
177
  });
178
+ const meshRef = React__namespace.useRef(null);
167
179
  const canvasRef = React__namespace.useRef(null);
168
180
  const [canvas, setCanvas] = React__namespace.useState(null);
169
- const canvasProps = index.pick(props, CANVAS_PROPS);
170
- const divProps = index.omit(props, CANVAS_PROPS);
181
+ const canvasProps = index.pick({ ...props,
182
+ onPointerMissed
183
+ }, CANVAS_PROPS);
184
+ const divProps = index.omit({ ...props,
185
+ onPointerMissed
186
+ }, CANVAS_PROPS);
171
187
  const [block, setBlock] = React__namespace.useState(false);
172
188
  const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
173
189
 
@@ -179,6 +195,10 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
179
195
  if (width > 0 && height > 0 && canvas) {
180
196
  if (!root.current) root.current = index.createRoot(canvas);
181
197
  root.current.configure({ ...canvasProps,
198
+ onCreated: state => {
199
+ state.events.connect == null ? void 0 : state.events.connect(meshRef.current);
200
+ canvasProps.onCreated == null ? void 0 : canvasProps.onCreated(state);
201
+ },
182
202
  size: {
183
203
  width,
184
204
  height
@@ -201,7 +221,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
201
221
  return () => index.unmountComponentAtNode(canvas);
202
222
  }, [canvas]);
203
223
  return /*#__PURE__*/React__namespace.createElement("div", _extends({
204
- ref: containerRef,
224
+ ref: mergeRefs__default['default']([meshRef, containerRef]),
205
225
  style: {
206
226
  position: 'relative',
207
227
  width: '100%',
@@ -230,6 +250,7 @@ exports.createPortal = index.createPortal;
230
250
  exports.createRoot = index.createRoot;
231
251
  exports.dispose = index.dispose;
232
252
  exports.extend = index.extend;
253
+ exports.getRootState = index.getRootState;
233
254
  exports.invalidate = index.invalidate;
234
255
  exports.reconciler = index.reconciler;
235
256
  exports.render = index.render;
@@ -237,6 +258,7 @@ exports.unmountComponentAtNode = index.unmountComponentAtNode;
237
258
  exports.useFrame = index.useFrame;
238
259
  exports.useGraph = index.useGraph;
239
260
  exports.useLoader = index.useLoader;
261
+ exports.useMemoizedFn = index.useMemoizedFn;
240
262
  exports.useStore = index.useStore;
241
263
  exports.useThree = index.useThree;
242
264
  exports.Canvas = Canvas;
@@ -1,15 +1,15 @@
1
- import { c as createEvents, e as extend, p as pick, o as omit, a as createRoot, u as unmountComponentAtNode } from './index-3d7af2b7.esm.js';
2
- export { t as ReactThreeFiber, q as _roots, n as act, l as addAfterEffect, k as addEffect, m as addTail, j as advance, g as applyProps, b as context, d as createPortal, a as createRoot, h as dispose, e as extend, i as invalidate, f as reconciler, r as render, u as unmountComponentAtNode, w as useFrame, x as useGraph, y as useLoader, s as useStore, v as useThree } from './index-3d7af2b7.esm.js';
1
+ import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from './index-6a8cc5a4.esm.js';
2
+ export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from './index-6a8cc5a4.esm.js';
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
6
  import mergeRefs from 'react-merge-refs';
7
7
  import useMeasure from 'react-use-measure';
8
- import 'suspend-react';
9
8
  import 'react-reconciler/constants';
10
9
  import 'zustand';
11
10
  import 'react-reconciler';
12
11
  import 'scheduler';
12
+ import 'suspend-react';
13
13
 
14
14
  const DOM_EVENTS = {
15
15
  onClick: ['click', false],
@@ -28,7 +28,17 @@ function createPointerEvents(store) {
28
28
  handlePointer
29
29
  } = createEvents(store);
30
30
  return {
31
- connected: false,
31
+ priority: 1,
32
+ enabled: true,
33
+
34
+ compute(event, state, previous) {
35
+ // https://github.com/pmndrs/react-three-fiber/pull/782
36
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
37
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
38
+ state.raycaster.setFromCamera(state.pointer, state.camera);
39
+ },
40
+
41
+ connected: undefined,
32
42
  handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({ ...acc,
33
43
  [key]: handlePointer(key)
34
44
  }), {}),
@@ -69,7 +79,7 @@ function createPointerEvents(store) {
69
79
  });
70
80
  set(state => ({
71
81
  events: { ...state.events,
72
- connected: false
82
+ connected: undefined
73
83
  }
74
84
  }));
75
85
  }
@@ -123,6 +133,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
123
133
  // This will include the entire THREE namespace by default, users can extend
124
134
  // their own elements by using the createRoot API instead
125
135
  React.useMemo(() => extend(THREE), []);
136
+ const onPointerMissed = useMemoizedFn(props.onPointerMissed);
126
137
  const [containerRef, {
127
138
  width,
128
139
  height
@@ -134,10 +145,15 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
134
145
  },
135
146
  ...resize
136
147
  });
148
+ const meshRef = React.useRef(null);
137
149
  const canvasRef = React.useRef(null);
138
150
  const [canvas, setCanvas] = React.useState(null);
139
- const canvasProps = pick(props, CANVAS_PROPS);
140
- const divProps = omit(props, CANVAS_PROPS);
151
+ const canvasProps = pick({ ...props,
152
+ onPointerMissed
153
+ }, CANVAS_PROPS);
154
+ const divProps = omit({ ...props,
155
+ onPointerMissed
156
+ }, CANVAS_PROPS);
141
157
  const [block, setBlock] = React.useState(false);
142
158
  const [error, setError] = React.useState(false); // Suspend this component if block is a promise (2nd run)
143
159
 
@@ -149,6 +165,10 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
149
165
  if (width > 0 && height > 0 && canvas) {
150
166
  if (!root.current) root.current = createRoot(canvas);
151
167
  root.current.configure({ ...canvasProps,
168
+ onCreated: state => {
169
+ state.events.connect == null ? void 0 : state.events.connect(meshRef.current);
170
+ canvasProps.onCreated == null ? void 0 : canvasProps.onCreated(state);
171
+ },
152
172
  size: {
153
173
  width,
154
174
  height
@@ -171,7 +191,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(function Canvas({
171
191
  return () => unmountComponentAtNode(canvas);
172
192
  }, [canvas]);
173
193
  return /*#__PURE__*/React.createElement("div", _extends({
174
- ref: containerRef,
194
+ ref: mergeRefs([meshRef, containerRef]),
175
195
  style: {
176
196
  position: 'relative',
177
197
  width: '100%',
@@ -4,17 +4,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var THREE = require('three');
6
6
  var expoAsset = require('expo-asset');
7
- var index = require('../../dist/index-2b21ab4b.cjs.dev.js');
7
+ var index = require('../../dist/index-8ce56249.cjs.dev.js');
8
8
  var _extends = require('@babel/runtime/helpers/extends');
9
9
  var React = require('react');
10
+ var mergeRefs = require('react-merge-refs');
10
11
  var reactNative = require('react-native');
11
12
  var expoGl = require('expo-gl');
12
13
  var Pressability = require('react-native/Libraries/Pressability/Pressability');
13
- require('suspend-react');
14
14
  require('react-reconciler/constants');
15
15
  require('zustand');
16
16
  require('react-reconciler');
17
17
  require('scheduler');
18
+ require('suspend-react');
18
19
 
19
20
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
20
21
 
@@ -40,6 +41,7 @@ function _interopNamespace(e) {
40
41
 
41
42
  var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
42
43
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
44
+ var mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
43
45
  var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
44
46
 
45
47
  const EVENTS = {
@@ -76,7 +78,17 @@ function createTouchEvents(store) {
76
78
  };
77
79
 
78
80
  return {
79
- connected: false,
81
+ priority: 1,
82
+ enabled: true,
83
+
84
+ compute(event, state, previous) {
85
+ // https://github.com/pmndrs/react-three-fiber/pull/782
86
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
87
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
88
+ state.raycaster.setFromCamera(state.pointer, state.camera);
89
+ },
90
+
91
+ connected: undefined,
80
92
  handlers: Object.values(EVENTS).reduce((acc, name) => ({ ...acc,
81
93
  [name]: event => handleTouch(event, name)
82
94
  }), {}),
@@ -105,7 +117,7 @@ function createTouchEvents(store) {
105
117
  events.connected.reset();
106
118
  set(state => ({
107
119
  events: { ...state.events,
108
- connected: false
120
+ connected: undefined
109
121
  }
110
122
  }));
111
123
  }
@@ -158,6 +170,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
158
170
  // This will include the entire THREE namespace by default, users can extend
159
171
  // their own elements by using the createRoot API instead
160
172
  React__namespace.useMemo(() => index.extend(THREE__namespace), []);
173
+ const onPointerMissed = index.useMemoizedFn(props.onPointerMissed);
161
174
  const [{
162
175
  width,
163
176
  height
@@ -167,14 +180,19 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
167
180
  });
168
181
  const [canvas, setCanvas] = React__namespace.useState(null);
169
182
  const [bind, setBind] = React__namespace.useState();
170
- const canvasProps = index.pick(props, CANVAS_PROPS);
171
- const viewProps = index.omit(props, CANVAS_PROPS);
183
+ const canvasProps = index.pick({ ...props,
184
+ onPointerMissed
185
+ }, CANVAS_PROPS);
186
+ const viewProps = index.omit({ ...props,
187
+ onPointerMissed
188
+ }, CANVAS_PROPS);
172
189
  const [block, setBlock] = React__namespace.useState(false);
173
190
  const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
174
191
 
175
192
  if (block) throw block; // Throw exception outwards if anything within canvas throws
176
193
 
177
194
  if (error) throw error;
195
+ const viewRef = React__namespace.useRef(null);
178
196
  const root = React__namespace.useRef(null);
179
197
  const onLayout = React__namespace.useCallback(e => {
180
198
  const {
@@ -204,7 +222,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
204
222
 
205
223
  const onCreated = state => {
206
224
  // Bind events after creation
207
- const handlers = state.events.connect == null ? void 0 : state.events.connect(canvas);
225
+ const handlers = state.events.connect == null ? void 0 : state.events.connect(viewRef.current);
208
226
  setBind(handlers); // Bind render to RN bridge
209
227
 
210
228
  const context = state.gl.getContext();
@@ -242,7 +260,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
242
260
  return () => index.unmountComponentAtNode(canvas);
243
261
  }, [canvas]);
244
262
  return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, viewProps, {
245
- ref: forwardedRef,
263
+ ref: mergeRefs__default['default']([viewRef, forwardedRef]),
246
264
  onLayout: onLayout,
247
265
  style: {
248
266
  flex: 1,
@@ -280,7 +298,7 @@ THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? e
280
298
 
281
299
 
282
300
  THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
283
- const texture = new THREE__namespace.Texture(); // @ts-expect-error
301
+ const texture = new THREE__namespace.Texture(); // @ts-ignore
284
302
 
285
303
  texture.isDataTexture = true;
286
304
  getAsset(url).downloadAsync().then(asset => {
@@ -350,6 +368,7 @@ exports.createPortal = index.createPortal;
350
368
  exports.createRoot = index.createRoot;
351
369
  exports.dispose = index.dispose;
352
370
  exports.extend = index.extend;
371
+ exports.getRootState = index.getRootState;
353
372
  exports.invalidate = index.invalidate;
354
373
  exports.reconciler = index.reconciler;
355
374
  exports.render = index.render;
@@ -357,6 +376,7 @@ exports.unmountComponentAtNode = index.unmountComponentAtNode;
357
376
  exports.useFrame = index.useFrame;
358
377
  exports.useGraph = index.useGraph;
359
378
  exports.useLoader = index.useLoader;
379
+ exports.useMemoizedFn = index.useMemoizedFn;
360
380
  exports.useStore = index.useStore;
361
381
  exports.useThree = index.useThree;
362
382
  exports.Canvas = Canvas;
@@ -4,17 +4,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var THREE = require('three');
6
6
  var expoAsset = require('expo-asset');
7
- var index = require('../../dist/index-a9d2810c.cjs.prod.js');
7
+ var index = require('../../dist/index-2d224292.cjs.prod.js');
8
8
  var _extends = require('@babel/runtime/helpers/extends');
9
9
  var React = require('react');
10
+ var mergeRefs = require('react-merge-refs');
10
11
  var reactNative = require('react-native');
11
12
  var expoGl = require('expo-gl');
12
13
  var Pressability = require('react-native/Libraries/Pressability/Pressability');
13
- require('suspend-react');
14
14
  require('react-reconciler/constants');
15
15
  require('zustand');
16
16
  require('react-reconciler');
17
17
  require('scheduler');
18
+ require('suspend-react');
18
19
 
19
20
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
20
21
 
@@ -40,6 +41,7 @@ function _interopNamespace(e) {
40
41
 
41
42
  var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
42
43
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
44
+ var mergeRefs__default = /*#__PURE__*/_interopDefault(mergeRefs);
43
45
  var Pressability__default = /*#__PURE__*/_interopDefault(Pressability);
44
46
 
45
47
  const EVENTS = {
@@ -76,7 +78,17 @@ function createTouchEvents(store) {
76
78
  };
77
79
 
78
80
  return {
79
- connected: false,
81
+ priority: 1,
82
+ enabled: true,
83
+
84
+ compute(event, state, previous) {
85
+ // https://github.com/pmndrs/react-three-fiber/pull/782
86
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
87
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
88
+ state.raycaster.setFromCamera(state.pointer, state.camera);
89
+ },
90
+
91
+ connected: undefined,
80
92
  handlers: Object.values(EVENTS).reduce((acc, name) => ({ ...acc,
81
93
  [name]: event => handleTouch(event, name)
82
94
  }), {}),
@@ -105,7 +117,7 @@ function createTouchEvents(store) {
105
117
  events.connected.reset();
106
118
  set(state => ({
107
119
  events: { ...state.events,
108
- connected: false
120
+ connected: undefined
109
121
  }
110
122
  }));
111
123
  }
@@ -158,6 +170,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
158
170
  // This will include the entire THREE namespace by default, users can extend
159
171
  // their own elements by using the createRoot API instead
160
172
  React__namespace.useMemo(() => index.extend(THREE__namespace), []);
173
+ const onPointerMissed = index.useMemoizedFn(props.onPointerMissed);
161
174
  const [{
162
175
  width,
163
176
  height
@@ -167,14 +180,19 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
167
180
  });
168
181
  const [canvas, setCanvas] = React__namespace.useState(null);
169
182
  const [bind, setBind] = React__namespace.useState();
170
- const canvasProps = index.pick(props, CANVAS_PROPS);
171
- const viewProps = index.omit(props, CANVAS_PROPS);
183
+ const canvasProps = index.pick({ ...props,
184
+ onPointerMissed
185
+ }, CANVAS_PROPS);
186
+ const viewProps = index.omit({ ...props,
187
+ onPointerMissed
188
+ }, CANVAS_PROPS);
172
189
  const [block, setBlock] = React__namespace.useState(false);
173
190
  const [error, setError] = React__namespace.useState(false); // Suspend this component if block is a promise (2nd run)
174
191
 
175
192
  if (block) throw block; // Throw exception outwards if anything within canvas throws
176
193
 
177
194
  if (error) throw error;
195
+ const viewRef = React__namespace.useRef(null);
178
196
  const root = React__namespace.useRef(null);
179
197
  const onLayout = React__namespace.useCallback(e => {
180
198
  const {
@@ -204,7 +222,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
204
222
 
205
223
  const onCreated = state => {
206
224
  // Bind events after creation
207
- const handlers = state.events.connect == null ? void 0 : state.events.connect(canvas);
225
+ const handlers = state.events.connect == null ? void 0 : state.events.connect(viewRef.current);
208
226
  setBind(handlers); // Bind render to RN bridge
209
227
 
210
228
  const context = state.gl.getContext();
@@ -242,7 +260,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
242
260
  return () => index.unmountComponentAtNode(canvas);
243
261
  }, [canvas]);
244
262
  return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, viewProps, {
245
- ref: forwardedRef,
263
+ ref: mergeRefs__default['default']([viewRef, forwardedRef]),
246
264
  onLayout: onLayout,
247
265
  style: {
248
266
  flex: 1,
@@ -280,7 +298,7 @@ THREE__namespace.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? e
280
298
 
281
299
 
282
300
  THREE__namespace.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
283
- const texture = new THREE__namespace.Texture(); // @ts-expect-error
301
+ const texture = new THREE__namespace.Texture(); // @ts-ignore
284
302
 
285
303
  texture.isDataTexture = true;
286
304
  getAsset(url).downloadAsync().then(asset => {
@@ -350,6 +368,7 @@ exports.createPortal = index.createPortal;
350
368
  exports.createRoot = index.createRoot;
351
369
  exports.dispose = index.dispose;
352
370
  exports.extend = index.extend;
371
+ exports.getRootState = index.getRootState;
353
372
  exports.invalidate = index.invalidate;
354
373
  exports.reconciler = index.reconciler;
355
374
  exports.render = index.render;
@@ -357,6 +376,7 @@ exports.unmountComponentAtNode = index.unmountComponentAtNode;
357
376
  exports.useFrame = index.useFrame;
358
377
  exports.useGraph = index.useGraph;
359
378
  exports.useLoader = index.useLoader;
379
+ exports.useMemoizedFn = index.useMemoizedFn;
360
380
  exports.useStore = index.useStore;
361
381
  exports.useThree = index.useThree;
362
382
  exports.Canvas = Canvas;
@@ -1,17 +1,18 @@
1
1
  import * as THREE from 'three';
2
2
  import { Asset } from 'expo-asset';
3
- import { c as createEvents, e as extend, p as pick, o as omit, a as createRoot, u as unmountComponentAtNode } from '../../dist/index-3d7af2b7.esm.js';
4
- export { t as ReactThreeFiber, q as _roots, n as act, l as addAfterEffect, k as addEffect, m as addTail, j as advance, g as applyProps, b as context, d as createPortal, a as createRoot, h as dispose, e as extend, i as invalidate, f as reconciler, r as render, u as unmountComponentAtNode, w as useFrame, x as useGraph, y as useLoader, s as useStore, v as useThree } from '../../dist/index-3d7af2b7.esm.js';
3
+ import { c as createEvents, e as extend, u as useMemoizedFn, p as pick, o as omit, a as createRoot, b as unmountComponentAtNode } from '../../dist/index-6a8cc5a4.esm.js';
4
+ export { t as ReactThreeFiber, v as _roots, s as act, m as addAfterEffect, l as addEffect, n as addTail, k as advance, h as applyProps, d as context, f as createPortal, a as createRoot, i as dispose, e as extend, q as getRootState, j as invalidate, g as reconciler, r as render, b as unmountComponentAtNode, y as useFrame, z as useGraph, A as useLoader, u as useMemoizedFn, w as useStore, x as useThree } from '../../dist/index-6a8cc5a4.esm.js';
5
5
  import _extends from '@babel/runtime/helpers/esm/extends';
6
6
  import * as React from 'react';
7
+ import mergeRefs from 'react-merge-refs';
7
8
  import { PixelRatio, View, StyleSheet } from 'react-native';
8
9
  import { GLView } from 'expo-gl';
9
10
  import Pressability from 'react-native/Libraries/Pressability/Pressability';
10
- import 'suspend-react';
11
11
  import 'react-reconciler/constants';
12
12
  import 'zustand';
13
13
  import 'react-reconciler';
14
14
  import 'scheduler';
15
+ import 'suspend-react';
15
16
 
16
17
  const EVENTS = {
17
18
  PRESS: 'onPress',
@@ -47,7 +48,17 @@ function createTouchEvents(store) {
47
48
  };
48
49
 
49
50
  return {
50
- connected: false,
51
+ priority: 1,
52
+ enabled: true,
53
+
54
+ compute(event, state, previous) {
55
+ // https://github.com/pmndrs/react-three-fiber/pull/782
56
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
57
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
58
+ state.raycaster.setFromCamera(state.pointer, state.camera);
59
+ },
60
+
61
+ connected: undefined,
51
62
  handlers: Object.values(EVENTS).reduce((acc, name) => ({ ...acc,
52
63
  [name]: event => handleTouch(event, name)
53
64
  }), {}),
@@ -76,7 +87,7 @@ function createTouchEvents(store) {
76
87
  events.connected.reset();
77
88
  set(state => ({
78
89
  events: { ...state.events,
79
- connected: false
90
+ connected: undefined
80
91
  }
81
92
  }));
82
93
  }
@@ -129,6 +140,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
129
140
  // This will include the entire THREE namespace by default, users can extend
130
141
  // their own elements by using the createRoot API instead
131
142
  React.useMemo(() => extend(THREE), []);
143
+ const onPointerMissed = useMemoizedFn(props.onPointerMissed);
132
144
  const [{
133
145
  width,
134
146
  height
@@ -138,14 +150,19 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
138
150
  });
139
151
  const [canvas, setCanvas] = React.useState(null);
140
152
  const [bind, setBind] = React.useState();
141
- const canvasProps = pick(props, CANVAS_PROPS);
142
- const viewProps = omit(props, CANVAS_PROPS);
153
+ const canvasProps = pick({ ...props,
154
+ onPointerMissed
155
+ }, CANVAS_PROPS);
156
+ const viewProps = omit({ ...props,
157
+ onPointerMissed
158
+ }, CANVAS_PROPS);
143
159
  const [block, setBlock] = React.useState(false);
144
160
  const [error, setError] = React.useState(false); // Suspend this component if block is a promise (2nd run)
145
161
 
146
162
  if (block) throw block; // Throw exception outwards if anything within canvas throws
147
163
 
148
164
  if (error) throw error;
165
+ const viewRef = React.useRef(null);
149
166
  const root = React.useRef(null);
150
167
  const onLayout = React.useCallback(e => {
151
168
  const {
@@ -175,7 +192,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
175
192
 
176
193
  const onCreated = state => {
177
194
  // Bind events after creation
178
- const handlers = state.events.connect == null ? void 0 : state.events.connect(canvas);
195
+ const handlers = state.events.connect == null ? void 0 : state.events.connect(viewRef.current);
179
196
  setBind(handlers); // Bind render to RN bridge
180
197
 
181
198
  const context = state.gl.getContext();
@@ -213,7 +230,7 @@ const Canvas = /*#__PURE__*/React.forwardRef(({
213
230
  return () => unmountComponentAtNode(canvas);
214
231
  }, [canvas]);
215
232
  return /*#__PURE__*/React.createElement(View, _extends({}, viewProps, {
216
- ref: forwardedRef,
233
+ ref: mergeRefs([viewRef, forwardedRef]),
217
234
  onLayout: onLayout,
218
235
  style: {
219
236
  flex: 1,
@@ -251,7 +268,7 @@ THREE.LoaderUtils.extractUrlBase = url => typeof url === 'string' ? extractUrlBa
251
268
 
252
269
 
253
270
  THREE.TextureLoader.prototype.load = function load(url, onLoad, onProgress, onError) {
254
- const texture = new THREE.Texture(); // @ts-expect-error
271
+ const texture = new THREE.Texture(); // @ts-ignore
255
272
 
256
273
  texture.isDataTexture = true;
257
274
  getAsset(url).downloadAsync().then(asset => {