@react-three/fiber 8.0.11 → 8.0.12

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @react-three/fiber
2
2
 
3
+ ## 8.0.12
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d10413f: fix portal layers
8
+
3
9
  ## 8.0.11
4
10
 
5
11
  ### Patch Changes
@@ -62,7 +62,7 @@ export interface PointerCaptureTarget {
62
62
  intersection: Intersection;
63
63
  target: Element;
64
64
  }
65
- export declare function getEventPriority(): any;
65
+ export declare function getEventPriority(): 1 | 4 | 16;
66
66
  export declare function removeInteractivity(store: UseBoundStore<RootState>, object: THREE.Object3D): void;
67
67
  export declare function createEvents(store: UseBoundStore<RootState>): {
68
68
  handlePointer: (name: string) => (event: DomEvent) => void;
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { GetState, SetState, StoreApi, UseBoundStore } from 'zustand';
4
4
  import { DomEvent, EventManager, PointerCaptureTarget, ThreeEvent } from './events';
5
5
  import { Camera } from './utils';
6
- export declare const privateKeys: readonly ["set", "get", "setSize", "setFrameloop", "setDpr", "events", "invalidate", "advance", "performance", "internal", "size", "viewport"];
6
+ export declare const privateKeys: readonly ["set", "get", "setSize", "setFrameloop", "setDpr", "events", "invalidate", "advance", "size", "viewport"];
7
7
  export declare type PrivateKeys = typeof privateKeys[number];
8
8
  export interface Intersection extends THREE.Intersection {
9
9
  eventObject: THREE.Object3D;
@@ -14,6 +14,7 @@ export declare type UnblockProps = {
14
14
  export declare function Block({ set }: Omit<UnblockProps, 'children'>): null;
15
15
  export declare class ErrorBoundary extends React.Component<{
16
16
  set: React.Dispatch<any>;
17
+ children: React.ReactNode;
17
18
  }, {
18
19
  error: boolean;
19
20
  }> {
@@ -102,6 +102,7 @@ export declare type ConeGeometryProps = BufferGeometryNode<THREE.ConeGeometry, t
102
102
  export declare type CylinderGeometryProps = BufferGeometryNode<THREE.CylinderGeometry, typeof THREE.CylinderGeometry>;
103
103
  export declare type CircleGeometryProps = BufferGeometryNode<THREE.CircleGeometry, typeof THREE.CircleGeometry>;
104
104
  export declare type BoxGeometryProps = BufferGeometryNode<THREE.BoxGeometry, typeof THREE.BoxGeometry>;
105
+ export declare type CapsuleGeometryProps = BufferGeometryNode<THREE.CapsuleBufferGeometry, typeof THREE.CapsuleBufferGeometry>;
105
106
  export declare type MaterialProps = MaterialNode<THREE.Material, [THREE.MaterialParameters]>;
106
107
  export declare type ShadowMaterialProps = MaterialNode<THREE.ShadowMaterial, [THREE.ShaderMaterialParameters]>;
107
108
  export declare type SpriteMaterialProps = MaterialNode<THREE.SpriteMaterial, [THREE.SpriteMaterialParameters]>;
@@ -245,6 +246,7 @@ declare global {
245
246
  cylinderGeometry: CylinderGeometryProps;
246
247
  circleGeometry: CircleGeometryProps;
247
248
  boxGeometry: BoxGeometryProps;
249
+ capsuleGeometry: CapsuleGeometryProps;
248
250
  material: MaterialProps;
249
251
  shadowMaterial: ShadowMaterialProps;
250
252
  spriteMaterial: SpriteMaterialProps;
@@ -315,35 +315,35 @@ function applyProps$1(instance, data) {
315
315
  localState.eventCount = Object.keys(localState.handlers).length;
316
316
  } // Special treatment for objects with support for set/copy, and layers
317
317
  else if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof THREE.Layers)) {
318
- // If value is an array
319
- if (Array.isArray(value)) {
320
- if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
321
- } // Test again target.copy(class) next ...
322
- else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
323
- targetProp.copy(value);
324
- } // If nothing else fits, just set the single value, ignore undefined
325
- // https://github.com/pmndrs/react-three-fiber/issues/274
326
- else if (value !== undefined) {
327
- const isColor = targetProp instanceof THREE.Color; // Allow setting array scalars
328
-
329
- if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
330
- else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) targetProp.mask = value.mask; // Otherwise just set ...
331
- else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
332
- // Auto-convert sRGB colors
333
- // https://github.com/pmndrs/react-three-fiber/issues/344
334
-
335
- const supportsColorManagement = THREE.ColorManagement;
336
- if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
337
- } // Else, just overwrite the value
338
-
339
- } else {
340
- currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
318
+ // If value is an array
319
+ if (Array.isArray(value)) {
320
+ if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
321
+ } // Test again target.copy(class) next ...
322
+ else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
323
+ targetProp.copy(value);
324
+ } // If nothing else fits, just set the single value, ignore undefined
325
+ // https://github.com/pmndrs/react-three-fiber/issues/274
326
+ else if (value !== undefined) {
327
+ const isColor = targetProp instanceof THREE.Color; // Allow setting array scalars
328
+
329
+ if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
330
+ else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) targetProp.mask = value.mask; // Otherwise just set ...
331
+ else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
332
+ // Auto-convert sRGB colors
341
333
  // https://github.com/pmndrs/react-three-fiber/issues/344
342
334
 
343
- if (!rootState.linear && currentInstance[key] instanceof THREE.Texture) {
344
- currentInstance[key].encoding = THREE.sRGBEncoding;
345
- }
335
+ const supportsColorManagement = THREE.ColorManagement;
336
+ if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
337
+ } // Else, just overwrite the value
338
+
339
+ } else {
340
+ currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
341
+ // https://github.com/pmndrs/react-three-fiber/issues/344
342
+
343
+ if (!rootState.linear && currentInstance[key] instanceof THREE.Texture) {
344
+ currentInstance[key].encoding = THREE.sRGBEncoding;
346
345
  }
346
+ }
347
347
 
348
348
  invalidateInstance(instance);
349
349
  });
@@ -1160,7 +1160,7 @@ function createRenderer(roots, getEventPriority) {
1160
1160
  };
1161
1161
  }
1162
1162
 
1163
- const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'performance', 'internal', 'size', 'viewport'];
1163
+ const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'size', 'viewport'];
1164
1164
  const isRenderer = def => !!(def != null && def.render);
1165
1165
  const context = /*#__PURE__*/React.createContext(null);
1166
1166
 
@@ -1913,29 +1913,28 @@ function Portal({
1913
1913
  const previousRoot = useStore();
1914
1914
  const [raycaster] = React.useState(() => new THREE.Raycaster());
1915
1915
  const [pointer] = React.useState(() => new THREE.Vector2());
1916
- const inject = React.useCallback((state, injectState) => {
1917
- const intersect = { ...state
1918
- };
1919
-
1920
- if (injectState) {
1921
- // Only the fields of "state" that do not differ from injectState
1922
- // Some props should be off-limits
1923
- // Otherwise filter out the props that are different and let the inject layer take precedence
1924
- Object.keys(state).forEach(key => {
1925
- if ( // Some props should be off-limits
1926
- !privateKeys.includes(key) && // Otherwise filter out the props that are different and let the inject layer take precedence
1927
- state[key] !== injectState[key]) delete intersect[key];
1928
- });
1929
- }
1930
-
1916
+ const inject = React.useCallback((rootState, injectState) => {
1917
+ const intersect = { ...rootState
1918
+ }; // all prev state props
1919
+ // Only the fields of "rootState" that do not differ from injectState
1920
+ // Some props should be off-limits
1921
+ // Otherwise filter out the props that are different and let the inject layer take precedence
1922
+
1923
+ Object.keys(rootState).forEach(key => {
1924
+ if ( // Some props should be off-limits
1925
+ privateKeys.includes(key) || // Otherwise filter out the props that are different and let the inject layer take precedence
1926
+ rootState[key] !== injectState[key]) {
1927
+ delete intersect[key];
1928
+ }
1929
+ });
1931
1930
  let viewport = undefined;
1932
1931
 
1933
1932
  if (injectState && size) {
1934
1933
  const camera = injectState.camera; // Calculate the override viewport, if present
1935
1934
 
1936
- viewport = state.viewport.getCurrentViewport(camera, new THREE.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1935
+ viewport = rootState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1937
1936
 
1938
- if (camera !== state.camera) updateCamera(camera, size);
1937
+ if (camera !== rootState.camera) updateCamera(camera, size);
1939
1938
  }
1940
1939
 
1941
1940
  return { // The intersect consists of the previous root state
@@ -1948,14 +1947,14 @@ function Portal({
1948
1947
  // Their previous root is the layer before it
1949
1948
  previousRoot,
1950
1949
  // Events, size and viewport can be overridden by the inject layer
1951
- events: { ...state.events,
1950
+ events: { ...rootState.events,
1952
1951
  ...(injectState == null ? void 0 : injectState.events),
1953
1952
  ...events
1954
1953
  },
1955
- size: { ...state.size,
1954
+ size: { ...rootState.size,
1956
1955
  ...size
1957
1956
  },
1958
- viewport: { ...state.viewport,
1957
+ viewport: { ...rootState.viewport,
1959
1958
  ...viewport
1960
1959
  },
1961
1960
  ...rest
@@ -1963,9 +1962,20 @@ function Portal({
1963
1962
  }, [state]);
1964
1963
  const [usePortalStore] = React.useState(() => {
1965
1964
  // Create a mirrored store, based on the previous root with a few overrides ...
1966
- new THREE.Vector3();
1967
1965
  const previousState = previousRoot.getState();
1968
- const store = create((set, get) => ({ ...inject(previousState),
1966
+ const store = create((set, get) => ({ ...previousState,
1967
+ scene: container,
1968
+ raycaster,
1969
+ pointer,
1970
+ mouse: pointer,
1971
+ previousRoot,
1972
+ events: { ...previousState.events,
1973
+ ...events
1974
+ },
1975
+ size: { ...previousState.size,
1976
+ ...size
1977
+ },
1978
+ ...rest,
1969
1979
  // Set and get refer to this root-state
1970
1980
  set,
1971
1981
  get,
@@ -19,14 +19,12 @@ function _interopNamespace(e) {
19
19
  var d = Object.getOwnPropertyDescriptor(e, k);
20
20
  Object.defineProperty(n, k, d.get ? d : {
21
21
  enumerable: true,
22
- get: function () {
23
- return e[k];
24
- }
22
+ get: function () { return e[k]; }
25
23
  });
26
24
  }
27
25
  });
28
26
  }
29
- n['default'] = e;
27
+ n["default"] = e;
30
28
  return Object.freeze(n);
31
29
  }
32
30
 
@@ -344,35 +342,35 @@ function applyProps$1(instance, data) {
344
342
  localState.eventCount = Object.keys(localState.handlers).length;
345
343
  } // Special treatment for objects with support for set/copy, and layers
346
344
  else if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof THREE__namespace.Layers)) {
347
- // If value is an array
348
- if (Array.isArray(value)) {
349
- if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
350
- } // Test again target.copy(class) next ...
351
- else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
352
- targetProp.copy(value);
353
- } // If nothing else fits, just set the single value, ignore undefined
354
- // https://github.com/pmndrs/react-three-fiber/issues/274
355
- else if (value !== undefined) {
356
- const isColor = targetProp instanceof THREE__namespace.Color; // Allow setting array scalars
357
-
358
- if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
359
- else if (targetProp instanceof THREE__namespace.Layers && value instanceof THREE__namespace.Layers) targetProp.mask = value.mask; // Otherwise just set ...
360
- else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
361
- // Auto-convert sRGB colors
362
- // https://github.com/pmndrs/react-three-fiber/issues/344
363
-
364
- const supportsColorManagement = THREE__namespace.ColorManagement;
365
- if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
366
- } // Else, just overwrite the value
367
-
368
- } else {
369
- currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
345
+ // If value is an array
346
+ if (Array.isArray(value)) {
347
+ if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
348
+ } // Test again target.copy(class) next ...
349
+ else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
350
+ targetProp.copy(value);
351
+ } // If nothing else fits, just set the single value, ignore undefined
352
+ // https://github.com/pmndrs/react-three-fiber/issues/274
353
+ else if (value !== undefined) {
354
+ const isColor = targetProp instanceof THREE__namespace.Color; // Allow setting array scalars
355
+
356
+ if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
357
+ else if (targetProp instanceof THREE__namespace.Layers && value instanceof THREE__namespace.Layers) targetProp.mask = value.mask; // Otherwise just set ...
358
+ else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
359
+ // Auto-convert sRGB colors
370
360
  // https://github.com/pmndrs/react-three-fiber/issues/344
371
361
 
372
- if (!rootState.linear && currentInstance[key] instanceof THREE__namespace.Texture) {
373
- currentInstance[key].encoding = THREE__namespace.sRGBEncoding;
374
- }
362
+ const supportsColorManagement = THREE__namespace.ColorManagement;
363
+ if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
364
+ } // Else, just overwrite the value
365
+
366
+ } else {
367
+ currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
368
+ // https://github.com/pmndrs/react-three-fiber/issues/344
369
+
370
+ if (!rootState.linear && currentInstance[key] instanceof THREE__namespace.Texture) {
371
+ currentInstance[key].encoding = THREE__namespace.sRGBEncoding;
375
372
  }
373
+ }
376
374
 
377
375
  invalidateInstance(instance);
378
376
  });
@@ -1056,7 +1054,7 @@ function createRenderer(roots, getEventPriority) {
1056
1054
  });
1057
1055
  }
1058
1056
 
1059
- const reconciler = Reconciler__default['default']({
1057
+ const reconciler = Reconciler__default["default"]({
1060
1058
  createInstance,
1061
1059
  removeChild,
1062
1060
  appendChild,
@@ -1189,12 +1187,12 @@ function createRenderer(roots, getEventPriority) {
1189
1187
  };
1190
1188
  }
1191
1189
 
1192
- const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'performance', 'internal', 'size', 'viewport'];
1190
+ const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'size', 'viewport'];
1193
1191
  const isRenderer = def => !!(def != null && def.render);
1194
1192
  const context = /*#__PURE__*/React__namespace.createContext(null);
1195
1193
 
1196
1194
  const createStore = (invalidate, advance) => {
1197
- const rootState = create__default['default']((set, get) => {
1195
+ const rootState = create__default["default"]((set, get) => {
1198
1196
  const position = new THREE__namespace.Vector3();
1199
1197
  const defaultTarget = new THREE__namespace.Vector3();
1200
1198
  const tempTarget = new THREE__namespace.Vector3();
@@ -1942,29 +1940,28 @@ function Portal({
1942
1940
  const previousRoot = useStore();
1943
1941
  const [raycaster] = React__namespace.useState(() => new THREE__namespace.Raycaster());
1944
1942
  const [pointer] = React__namespace.useState(() => new THREE__namespace.Vector2());
1945
- const inject = React__namespace.useCallback((state, injectState) => {
1946
- const intersect = { ...state
1947
- };
1948
-
1949
- if (injectState) {
1950
- // Only the fields of "state" that do not differ from injectState
1951
- // Some props should be off-limits
1952
- // Otherwise filter out the props that are different and let the inject layer take precedence
1953
- Object.keys(state).forEach(key => {
1954
- if ( // Some props should be off-limits
1955
- !privateKeys.includes(key) && // Otherwise filter out the props that are different and let the inject layer take precedence
1956
- state[key] !== injectState[key]) delete intersect[key];
1957
- });
1958
- }
1959
-
1943
+ const inject = React__namespace.useCallback((rootState, injectState) => {
1944
+ const intersect = { ...rootState
1945
+ }; // all prev state props
1946
+ // Only the fields of "rootState" that do not differ from injectState
1947
+ // Some props should be off-limits
1948
+ // Otherwise filter out the props that are different and let the inject layer take precedence
1949
+
1950
+ Object.keys(rootState).forEach(key => {
1951
+ if ( // Some props should be off-limits
1952
+ privateKeys.includes(key) || // Otherwise filter out the props that are different and let the inject layer take precedence
1953
+ rootState[key] !== injectState[key]) {
1954
+ delete intersect[key];
1955
+ }
1956
+ });
1960
1957
  let viewport = undefined;
1961
1958
 
1962
1959
  if (injectState && size) {
1963
1960
  const camera = injectState.camera; // Calculate the override viewport, if present
1964
1961
 
1965
- viewport = state.viewport.getCurrentViewport(camera, new THREE__namespace.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1962
+ viewport = rootState.viewport.getCurrentViewport(camera, new THREE__namespace.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1966
1963
 
1967
- if (camera !== state.camera) updateCamera(camera, size);
1964
+ if (camera !== rootState.camera) updateCamera(camera, size);
1968
1965
  }
1969
1966
 
1970
1967
  return { // The intersect consists of the previous root state
@@ -1977,14 +1974,14 @@ function Portal({
1977
1974
  // Their previous root is the layer before it
1978
1975
  previousRoot,
1979
1976
  // Events, size and viewport can be overridden by the inject layer
1980
- events: { ...state.events,
1977
+ events: { ...rootState.events,
1981
1978
  ...(injectState == null ? void 0 : injectState.events),
1982
1979
  ...events
1983
1980
  },
1984
- size: { ...state.size,
1981
+ size: { ...rootState.size,
1985
1982
  ...size
1986
1983
  },
1987
- viewport: { ...state.viewport,
1984
+ viewport: { ...rootState.viewport,
1988
1985
  ...viewport
1989
1986
  },
1990
1987
  ...rest
@@ -1992,9 +1989,20 @@ function Portal({
1992
1989
  }, [state]);
1993
1990
  const [usePortalStore] = React__namespace.useState(() => {
1994
1991
  // Create a mirrored store, based on the previous root with a few overrides ...
1995
- new THREE__namespace.Vector3();
1996
1992
  const previousState = previousRoot.getState();
1997
- const store = create__default['default']((set, get) => ({ ...inject(previousState),
1993
+ const store = create__default["default"]((set, get) => ({ ...previousState,
1994
+ scene: container,
1995
+ raycaster,
1996
+ pointer,
1997
+ mouse: pointer,
1998
+ previousRoot,
1999
+ events: { ...previousState.events,
2000
+ ...events
2001
+ },
2002
+ size: { ...previousState.size,
2003
+ ...size
2004
+ },
2005
+ ...rest,
1998
2006
  // Set and get refer to this root-state
1999
2007
  set,
2000
2008
  get,
@@ -19,14 +19,12 @@ function _interopNamespace(e) {
19
19
  var d = Object.getOwnPropertyDescriptor(e, k);
20
20
  Object.defineProperty(n, k, d.get ? d : {
21
21
  enumerable: true,
22
- get: function () {
23
- return e[k];
24
- }
22
+ get: function () { return e[k]; }
25
23
  });
26
24
  }
27
25
  });
28
26
  }
29
- n['default'] = e;
27
+ n["default"] = e;
30
28
  return Object.freeze(n);
31
29
  }
32
30
 
@@ -344,35 +342,35 @@ function applyProps$1(instance, data) {
344
342
  localState.eventCount = Object.keys(localState.handlers).length;
345
343
  } // Special treatment for objects with support for set/copy, and layers
346
344
  else if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof THREE__namespace.Layers)) {
347
- // If value is an array
348
- if (Array.isArray(value)) {
349
- if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
350
- } // Test again target.copy(class) next ...
351
- else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
352
- targetProp.copy(value);
353
- } // If nothing else fits, just set the single value, ignore undefined
354
- // https://github.com/pmndrs/react-three-fiber/issues/274
355
- else if (value !== undefined) {
356
- const isColor = targetProp instanceof THREE__namespace.Color; // Allow setting array scalars
357
-
358
- if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
359
- else if (targetProp instanceof THREE__namespace.Layers && value instanceof THREE__namespace.Layers) targetProp.mask = value.mask; // Otherwise just set ...
360
- else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
361
- // Auto-convert sRGB colors
362
- // https://github.com/pmndrs/react-three-fiber/issues/344
363
-
364
- const supportsColorManagement = THREE__namespace.ColorManagement;
365
- if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
366
- } // Else, just overwrite the value
367
-
368
- } else {
369
- currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
345
+ // If value is an array
346
+ if (Array.isArray(value)) {
347
+ if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);
348
+ } // Test again target.copy(class) next ...
349
+ else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
350
+ targetProp.copy(value);
351
+ } // If nothing else fits, just set the single value, ignore undefined
352
+ // https://github.com/pmndrs/react-three-fiber/issues/274
353
+ else if (value !== undefined) {
354
+ const isColor = targetProp instanceof THREE__namespace.Color; // Allow setting array scalars
355
+
356
+ if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
357
+ else if (targetProp instanceof THREE__namespace.Layers && value instanceof THREE__namespace.Layers) targetProp.mask = value.mask; // Otherwise just set ...
358
+ else targetProp.set(value); // For versions of three which don't support THREE.ColorManagement,
359
+ // Auto-convert sRGB colors
370
360
  // https://github.com/pmndrs/react-three-fiber/issues/344
371
361
 
372
- if (!rootState.linear && currentInstance[key] instanceof THREE__namespace.Texture) {
373
- currentInstance[key].encoding = THREE__namespace.sRGBEncoding;
374
- }
362
+ const supportsColorManagement = THREE__namespace.ColorManagement;
363
+ if (!supportsColorManagement && !rootState.linear && isColor) targetProp.convertSRGBToLinear();
364
+ } // Else, just overwrite the value
365
+
366
+ } else {
367
+ currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
368
+ // https://github.com/pmndrs/react-three-fiber/issues/344
369
+
370
+ if (!rootState.linear && currentInstance[key] instanceof THREE__namespace.Texture) {
371
+ currentInstance[key].encoding = THREE__namespace.sRGBEncoding;
375
372
  }
373
+ }
376
374
 
377
375
  invalidateInstance(instance);
378
376
  });
@@ -1056,7 +1054,7 @@ function createRenderer(roots, getEventPriority) {
1056
1054
  });
1057
1055
  }
1058
1056
 
1059
- const reconciler = Reconciler__default['default']({
1057
+ const reconciler = Reconciler__default["default"]({
1060
1058
  createInstance,
1061
1059
  removeChild,
1062
1060
  appendChild,
@@ -1189,12 +1187,12 @@ function createRenderer(roots, getEventPriority) {
1189
1187
  };
1190
1188
  }
1191
1189
 
1192
- const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'performance', 'internal', 'size', 'viewport'];
1190
+ const privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'size', 'viewport'];
1193
1191
  const isRenderer = def => !!(def != null && def.render);
1194
1192
  const context = /*#__PURE__*/React__namespace.createContext(null);
1195
1193
 
1196
1194
  const createStore = (invalidate, advance) => {
1197
- const rootState = create__default['default']((set, get) => {
1195
+ const rootState = create__default["default"]((set, get) => {
1198
1196
  const position = new THREE__namespace.Vector3();
1199
1197
  const defaultTarget = new THREE__namespace.Vector3();
1200
1198
  const tempTarget = new THREE__namespace.Vector3();
@@ -1942,29 +1940,28 @@ function Portal({
1942
1940
  const previousRoot = useStore();
1943
1941
  const [raycaster] = React__namespace.useState(() => new THREE__namespace.Raycaster());
1944
1942
  const [pointer] = React__namespace.useState(() => new THREE__namespace.Vector2());
1945
- const inject = React__namespace.useCallback((state, injectState) => {
1946
- const intersect = { ...state
1947
- };
1948
-
1949
- if (injectState) {
1950
- // Only the fields of "state" that do not differ from injectState
1951
- // Some props should be off-limits
1952
- // Otherwise filter out the props that are different and let the inject layer take precedence
1953
- Object.keys(state).forEach(key => {
1954
- if ( // Some props should be off-limits
1955
- !privateKeys.includes(key) && // Otherwise filter out the props that are different and let the inject layer take precedence
1956
- state[key] !== injectState[key]) delete intersect[key];
1957
- });
1958
- }
1959
-
1943
+ const inject = React__namespace.useCallback((rootState, injectState) => {
1944
+ const intersect = { ...rootState
1945
+ }; // all prev state props
1946
+ // Only the fields of "rootState" that do not differ from injectState
1947
+ // Some props should be off-limits
1948
+ // Otherwise filter out the props that are different and let the inject layer take precedence
1949
+
1950
+ Object.keys(rootState).forEach(key => {
1951
+ if ( // Some props should be off-limits
1952
+ privateKeys.includes(key) || // Otherwise filter out the props that are different and let the inject layer take precedence
1953
+ rootState[key] !== injectState[key]) {
1954
+ delete intersect[key];
1955
+ }
1956
+ });
1960
1957
  let viewport = undefined;
1961
1958
 
1962
1959
  if (injectState && size) {
1963
1960
  const camera = injectState.camera; // Calculate the override viewport, if present
1964
1961
 
1965
- viewport = state.viewport.getCurrentViewport(camera, new THREE__namespace.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1962
+ viewport = rootState.viewport.getCurrentViewport(camera, new THREE__namespace.Vector3(), size); // Update the portal camera, if it differs from the previous layer
1966
1963
 
1967
- if (camera !== state.camera) updateCamera(camera, size);
1964
+ if (camera !== rootState.camera) updateCamera(camera, size);
1968
1965
  }
1969
1966
 
1970
1967
  return { // The intersect consists of the previous root state
@@ -1977,14 +1974,14 @@ function Portal({
1977
1974
  // Their previous root is the layer before it
1978
1975
  previousRoot,
1979
1976
  // Events, size and viewport can be overridden by the inject layer
1980
- events: { ...state.events,
1977
+ events: { ...rootState.events,
1981
1978
  ...(injectState == null ? void 0 : injectState.events),
1982
1979
  ...events
1983
1980
  },
1984
- size: { ...state.size,
1981
+ size: { ...rootState.size,
1985
1982
  ...size
1986
1983
  },
1987
- viewport: { ...state.viewport,
1984
+ viewport: { ...rootState.viewport,
1988
1985
  ...viewport
1989
1986
  },
1990
1987
  ...rest
@@ -1992,9 +1989,20 @@ function Portal({
1992
1989
  }, [state]);
1993
1990
  const [usePortalStore] = React__namespace.useState(() => {
1994
1991
  // Create a mirrored store, based on the previous root with a few overrides ...
1995
- new THREE__namespace.Vector3();
1996
1992
  const previousState = previousRoot.getState();
1997
- const store = create__default['default']((set, get) => ({ ...inject(previousState),
1993
+ const store = create__default["default"]((set, get) => ({ ...previousState,
1994
+ scene: container,
1995
+ raycaster,
1996
+ pointer,
1997
+ mouse: pointer,
1998
+ previousRoot,
1999
+ events: { ...previousState.events,
2000
+ ...events
2001
+ },
2002
+ size: { ...previousState.size,
2003
+ ...size
2004
+ },
2005
+ ...rest,
1998
2006
  // Set and get refer to this root-state
1999
2007
  set,
2000
2008
  get,
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-f7939a95.cjs.dev.js');
5
+ var index = require('./index-f67eaa0c.cjs.dev.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -25,14 +25,12 @@ function _interopNamespace(e) {
25
25
  var d = Object.getOwnPropertyDescriptor(e, k);
26
26
  Object.defineProperty(n, k, d.get ? d : {
27
27
  enumerable: true,
28
- get: function () {
29
- return e[k];
30
- }
28
+ get: function () { return e[k]; }
31
29
  });
32
30
  }
33
31
  });
34
32
  }
35
- n['default'] = e;
33
+ n["default"] = e;
36
34
  return Object.freeze(n);
37
35
  }
38
36
 
@@ -151,7 +149,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
151
149
  const [containerRef, {
152
150
  width,
153
151
  height
154
- }] = useMeasure__default['default']({
152
+ }] = useMeasure__default["default"]({
155
153
  scroll: true,
156
154
  debounce: {
157
155
  scroll: 50,
@@ -213,7 +211,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
213
211
  if (canvas) return () => index.unmountComponentAtNode(canvas);
214
212
  }, [canvas]);
215
213
  return /*#__PURE__*/React__namespace.createElement("div", _extends({
216
- ref: mergeRefs__default['default']([meshRef, containerRef]),
214
+ ref: mergeRefs__default["default"]([meshRef, containerRef]),
217
215
  style: {
218
216
  position: 'relative',
219
217
  width: '100%',
@@ -222,7 +220,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
222
220
  ...style
223
221
  }
224
222
  }, props), /*#__PURE__*/React__namespace.createElement("canvas", {
225
- ref: mergeRefs__default['default']([canvasRef, forwardedRef]),
223
+ ref: mergeRefs__default["default"]([canvasRef, forwardedRef]),
226
224
  style: {
227
225
  display: 'block'
228
226
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-e936c560.cjs.prod.js');
5
+ var index = require('./index-e322e5c8.cjs.prod.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -25,14 +25,12 @@ function _interopNamespace(e) {
25
25
  var d = Object.getOwnPropertyDescriptor(e, k);
26
26
  Object.defineProperty(n, k, d.get ? d : {
27
27
  enumerable: true,
28
- get: function () {
29
- return e[k];
30
- }
28
+ get: function () { return e[k]; }
31
29
  });
32
30
  }
33
31
  });
34
32
  }
35
- n['default'] = e;
33
+ n["default"] = e;
36
34
  return Object.freeze(n);
37
35
  }
38
36
 
@@ -151,7 +149,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
151
149
  const [containerRef, {
152
150
  width,
153
151
  height
154
- }] = useMeasure__default['default']({
152
+ }] = useMeasure__default["default"]({
155
153
  scroll: true,
156
154
  debounce: {
157
155
  scroll: 50,
@@ -213,7 +211,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
213
211
  if (canvas) return () => index.unmountComponentAtNode(canvas);
214
212
  }, [canvas]);
215
213
  return /*#__PURE__*/React__namespace.createElement("div", _extends({
216
- ref: mergeRefs__default['default']([meshRef, containerRef]),
214
+ ref: mergeRefs__default["default"]([meshRef, containerRef]),
217
215
  style: {
218
216
  position: 'relative',
219
217
  width: '100%',
@@ -222,7 +220,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(function Canvas({
222
220
  ...style
223
221
  }
224
222
  }, props), /*#__PURE__*/React__namespace.createElement("canvas", {
225
- ref: mergeRefs__default['default']([canvasRef, forwardedRef]),
223
+ ref: mergeRefs__default["default"]([canvasRef, forwardedRef]),
226
224
  style: {
227
225
  display: 'block'
228
226
  }
@@ -1,5 +1,5 @@
1
- import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, b as useIsomorphicLayoutEffect, d as unmountComponentAtNode } from './index-3c7aae97.esm.js';
2
- export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from './index-3c7aae97.esm.js';
1
+ import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, b as useIsomorphicLayoutEffect, d as unmountComponentAtNode } from './index-38c121a8.esm.js';
2
+ export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from './index-38c121a8.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';
@@ -4,7 +4,7 @@ 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-f7939a95.cjs.dev.js');
7
+ var index = require('../../dist/index-f67eaa0c.cjs.dev.js');
8
8
  var _extends = require('@babel/runtime/helpers/extends');
9
9
  var React = require('react');
10
10
  var mergeRefs = require('react-merge-refs');
@@ -28,14 +28,12 @@ function _interopNamespace(e) {
28
28
  var d = Object.getOwnPropertyDescriptor(e, k);
29
29
  Object.defineProperty(n, k, d.get ? d : {
30
30
  enumerable: true,
31
- get: function () {
32
- return e[k];
33
- }
31
+ get: function () { return e[k]; }
34
32
  });
35
33
  }
36
34
  });
37
35
  }
38
- n['default'] = e;
36
+ n["default"] = e;
39
37
  return Object.freeze(n);
40
38
  }
41
39
 
@@ -100,7 +98,7 @@ function createTouchEvents(store) {
100
98
  events
101
99
  } = store.getState();
102
100
  events.disconnect == null ? void 0 : events.disconnect();
103
- const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
101
+ const connected = new Pressability__default["default"](events == null ? void 0 : events.handlers);
104
102
  set(state => ({
105
103
  events: { ...state.events,
106
104
  connected
@@ -249,7 +247,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
249
247
  }
250
248
  }, [canvas]);
251
249
  return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, props, {
252
- ref: mergeRefs__default['default']([viewRef, forwardedRef]),
250
+ ref: mergeRefs__default["default"]([viewRef, forwardedRef]),
253
251
  onLayout: onLayout,
254
252
  style: {
255
253
  flex: 1,
@@ -4,7 +4,7 @@ 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-e936c560.cjs.prod.js');
7
+ var index = require('../../dist/index-e322e5c8.cjs.prod.js');
8
8
  var _extends = require('@babel/runtime/helpers/extends');
9
9
  var React = require('react');
10
10
  var mergeRefs = require('react-merge-refs');
@@ -28,14 +28,12 @@ function _interopNamespace(e) {
28
28
  var d = Object.getOwnPropertyDescriptor(e, k);
29
29
  Object.defineProperty(n, k, d.get ? d : {
30
30
  enumerable: true,
31
- get: function () {
32
- return e[k];
33
- }
31
+ get: function () { return e[k]; }
34
32
  });
35
33
  }
36
34
  });
37
35
  }
38
- n['default'] = e;
36
+ n["default"] = e;
39
37
  return Object.freeze(n);
40
38
  }
41
39
 
@@ -100,7 +98,7 @@ function createTouchEvents(store) {
100
98
  events
101
99
  } = store.getState();
102
100
  events.disconnect == null ? void 0 : events.disconnect();
103
- const connected = new Pressability__default['default'](events == null ? void 0 : events.handlers);
101
+ const connected = new Pressability__default["default"](events == null ? void 0 : events.handlers);
104
102
  set(state => ({
105
103
  events: { ...state.events,
106
104
  connected
@@ -249,7 +247,7 @@ const Canvas = /*#__PURE__*/React__namespace.forwardRef(({
249
247
  }
250
248
  }, [canvas]);
251
249
  return /*#__PURE__*/React__namespace.createElement(reactNative.View, _extends({}, props, {
252
- ref: mergeRefs__default['default']([viewRef, forwardedRef]),
250
+ ref: mergeRefs__default["default"]([viewRef, forwardedRef]),
253
251
  onLayout: onLayout,
254
252
  style: {
255
253
  flex: 1,
@@ -1,7 +1,7 @@
1
1
  import * as THREE from 'three';
2
2
  import { Asset } from 'expo-asset';
3
- import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from '../../dist/index-3c7aae97.esm.js';
4
- export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from '../../dist/index-3c7aae97.esm.js';
3
+ import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from '../../dist/index-38c121a8.esm.js';
4
+ export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from '../../dist/index-38c121a8.esm.js';
5
5
  import _extends from '@babel/runtime/helpers/esm/extends';
6
6
  import * as React from 'react';
7
7
  import mergeRefs from 'react-merge-refs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/fiber",
3
- "version": "8.0.11",
3
+ "version": "8.0.12",
4
4
  "description": "A React renderer for Threejs",
5
5
  "keywords": [
6
6
  "react",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@babel/runtime": "^7.17.8",
46
- "@types/react-reconciler": "^0.26.4",
46
+ "@types/react-reconciler": "^0.26.6",
47
47
  "react-merge-refs": "^1.1.0",
48
48
  "react-reconciler": "^0.27.0",
49
49
  "react-use-measure": "^2.1.1",