@react-three/fiber 10.0.0-canary.8f5b4d3 → 10.0.0-canary.ac30da2

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.
@@ -1,6 +1,5 @@
1
1
  import * as webgpu from 'three/webgpu';
2
2
  import { CubeRenderTarget, RenderTarget, Frustum, Matrix4, Group, BoxGeometry, MeshBasicNodeMaterial, Mesh, Node, NodeUpdateType, Layers, ShaderMaterial, Uniform, SRGBColorSpace, RGBAFormat, UnsignedByteType, Vector3, Vector2, TextureLoader, Texture as Texture$1, CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader, CanvasTarget, Raycaster, OrthographicCamera, PerspectiveCamera, Scene, PCFShadowMap, VSMShadowMap, BasicShadowMap, ACESFilmicToneMapping, WebGPURenderer, HalfFloatType, Color, Vector4, RenderPipeline } from 'three/webgpu';
3
- import { Inspector } from 'three/addons/inspector/Inspector.js';
4
3
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
5
4
  import * as React from 'react';
6
5
  import React__default, { useRef, useMemo, useLayoutEffect, useEffect, useContext, useImperativeHandle, useCallback, useState } from 'react';
@@ -34,6 +33,10 @@ function _mergeNamespaces(n, m) {
34
33
 
35
34
  const R3F_BUILD_LEGACY = false;
36
35
  const R3F_BUILD_WEBGPU = true;
36
+ async function loadInspector() {
37
+ const { Inspector } = await import('three/addons/inspector/Inspector.js');
38
+ return Inspector;
39
+ }
37
40
  const WebGLRenderer = class WebGLRenderer2 {
38
41
  constructor() {
39
42
  throw new Error(
@@ -47,13 +50,13 @@ const WebGLCubeRenderTarget = null;
47
50
  const THREE = /*#__PURE__*/_mergeNamespaces({
48
51
  __proto__: null,
49
52
  CubeRenderTargetCompat: CubeRenderTarget,
50
- Inspector: Inspector,
51
53
  R3F_BUILD_LEGACY: R3F_BUILD_LEGACY,
52
54
  R3F_BUILD_WEBGPU: R3F_BUILD_WEBGPU,
53
55
  RenderTargetCompat: RenderTarget,
54
56
  WebGLCubeRenderTarget: WebGLCubeRenderTarget,
55
57
  WebGLRenderTarget: WebGLRenderTarget,
56
- WebGLRenderer: WebGLRenderer
58
+ WebGLRenderer: WebGLRenderer,
59
+ loadInspector: loadInspector
57
60
  }, [webgpu]);
58
61
 
59
62
  const primaryRegistry = /* @__PURE__ */ new Map();
@@ -1051,17 +1054,10 @@ const createStore = (invalidate, advance) => {
1051
1054
  oldSize = size;
1052
1055
  oldDpr = viewport.dpr;
1053
1056
  updateCamera(camera, size);
1054
- if (internal.isSecondary && canvasTarget) {
1055
- if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
1056
- canvasTarget.setSize(size.width, size.height, false);
1057
- } else {
1058
- if (viewport.dpr > 0) actualRenderer.setPixelRatio(viewport.dpr);
1059
- actualRenderer.setSize(size.width, size.height, false);
1060
- if (canvasTarget) {
1061
- if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
1062
- canvasTarget.setSize(size.width, size.height, false);
1063
- }
1064
- }
1057
+ const resizeTarget = canvasTarget ?? actualRenderer;
1058
+ if (viewport.dpr > 0) resizeTarget.setPixelRatio(viewport.dpr);
1059
+ resizeTarget.setSize(size.width, size.height, false);
1060
+ internal.canvasTargetSizeDirty = true;
1065
1061
  }
1066
1062
  if (camera !== oldCamera) {
1067
1063
  oldCamera = camera;
@@ -1123,7 +1119,11 @@ function useLoader(loader, input, extensions, onProgress, cacheKey) {
1123
1119
  const results = cacheKeys.map(
1124
1120
  (key, index) => suspend(() => fn(loader, inputs[index]), [loader, key], { equal: is.equ })
1125
1121
  );
1126
- return Array.isArray(input) ? results : results[0];
1122
+ const stableRef = useRef(null);
1123
+ const previous = stableRef.current;
1124
+ const stable = previous !== null && previous.length === results.length && previous.every((value, i) => value === results[i]) ? previous : results;
1125
+ stableRef.current = stable;
1126
+ return Array.isArray(input) ? stable : stable[0];
1127
1127
  }
1128
1128
  useLoader.preload = function(loader, input, extensions, onProgress, cacheKey) {
1129
1129
  const inputs = Array.isArray(input) ? input : [input];
@@ -1138,7 +1138,7 @@ useLoader.clear = function(loader, input, cacheKey) {
1138
1138
  };
1139
1139
  useLoader.loader = getLoader$1;
1140
1140
 
1141
- function useFrame(callback, priorityOrOptions) {
1141
+ function useFrame$1(callback, priorityOrOptions) {
1142
1142
  const store = React.useContext(context);
1143
1143
  const isInsideCanvas = store !== null;
1144
1144
  const scheduler = getScheduler();
@@ -1288,6 +1288,11 @@ function getUrls(input) {
1288
1288
  if (Array.isArray(input)) return input;
1289
1289
  return Object.values(input);
1290
1290
  }
1291
+ function inputSignature(input) {
1292
+ if (typeof input === "string") return input;
1293
+ if (Array.isArray(input)) return input.join("\0");
1294
+ return Object.keys(input).sort().map((key) => `${key}\0${input[key]}`).join("");
1295
+ }
1291
1296
  function allUrlsCached(urls, textureCache) {
1292
1297
  return urls.every((url) => textureCache.has(url));
1293
1298
  }
@@ -1306,25 +1311,26 @@ function buildFromCache(input, textureCache) {
1306
1311
  }
1307
1312
  }
1308
1313
  function useTexture(input, optionsOrOnLoad) {
1309
- const renderer = useThree((state) => state.internal.actualRenderer);
1314
+ const renderer = useThree$1((state) => state.internal.actualRenderer);
1310
1315
  const store = useStore();
1311
1316
  const options = typeof optionsOrOnLoad === "function" ? { onLoad: optionsOrOnLoad } : optionsOrOnLoad ?? {};
1312
1317
  const { onLoad, cache = true } = options;
1313
1318
  const onLoadRef = useRef(onLoad);
1314
1319
  onLoadRef.current = onLoad;
1315
1320
  const onLoadCalledForRef = useRef(null);
1316
- const urls = useMemo(() => getUrls(input), [input]);
1321
+ const inputKey = useMemo(() => inputSignature(input), [input]);
1322
+ const stableInput = useMemo(() => input, [inputKey]);
1323
+ const urls = useMemo(() => getUrls(stableInput), [stableInput]);
1317
1324
  const cachedResult = useMemo(() => {
1318
1325
  if (!cache) return null;
1319
1326
  const textures = store.getState().textures;
1320
1327
  if (!allUrlsCached(urls, textures)) return null;
1321
- return buildFromCache(input, textures);
1322
- }, [cache, urls, input, store]);
1328
+ return buildFromCache(stableInput, textures);
1329
+ }, [cache, urls, stableInput, store]);
1323
1330
  const loadedTextures = useLoader(
1324
1331
  TextureLoader,
1325
- IsObject(input) ? Object.values(input) : input
1332
+ IsObject(stableInput) ? Object.values(stableInput) : stableInput
1326
1333
  );
1327
- const inputKey = urls.join("\0");
1328
1334
  useLayoutEffect(() => {
1329
1335
  if (cachedResult) return;
1330
1336
  if (onLoadCalledForRef.current === inputKey) return;
@@ -1351,28 +1357,28 @@ function useTexture(input, optionsOrOnLoad) {
1351
1357
  }, [renderer, loadedTextures, cachedResult]);
1352
1358
  const mappedTextures = useMemo(() => {
1353
1359
  if (cachedResult) return cachedResult;
1354
- if (IsObject(input)) {
1360
+ if (IsObject(stableInput)) {
1355
1361
  const keyed = {};
1356
1362
  const textureArray = loadedTextures;
1357
1363
  let i = 0;
1358
- for (const key in input) keyed[key] = textureArray[i++];
1364
+ for (const key in stableInput) keyed[key] = textureArray[i++];
1359
1365
  return keyed;
1360
1366
  } else {
1361
1367
  return loadedTextures;
1362
1368
  }
1363
- }, [input, loadedTextures, cachedResult]);
1369
+ }, [stableInput, loadedTextures, cachedResult]);
1364
1370
  useEffect(() => {
1365
1371
  if (!cache) return;
1366
1372
  const urlTextureMap = [];
1367
- if (typeof input === "string") {
1368
- urlTextureMap.push([input, mappedTextures]);
1369
- } else if (Array.isArray(input)) {
1373
+ if (typeof stableInput === "string") {
1374
+ urlTextureMap.push([stableInput, mappedTextures]);
1375
+ } else if (Array.isArray(stableInput)) {
1370
1376
  const textureArray = mappedTextures;
1371
- input.forEach((url, i) => urlTextureMap.push([url, textureArray[i]]));
1372
- } else if (IsObject(input)) {
1377
+ stableInput.forEach((url, i) => urlTextureMap.push([url, textureArray[i]]));
1378
+ } else if (IsObject(stableInput)) {
1373
1379
  const textureRecord = mappedTextures;
1374
- for (const key in input) {
1375
- const url = input[key];
1380
+ for (const key in stableInput) {
1381
+ const url = stableInput[key];
1376
1382
  urlTextureMap.push([url, textureRecord[key]]);
1377
1383
  }
1378
1384
  }
@@ -1401,7 +1407,7 @@ function useTexture(input, optionsOrOnLoad) {
1401
1407
  }
1402
1408
  return { _textureRefs: refs };
1403
1409
  });
1404
- }, [cache, input, mappedTextures, store]);
1410
+ }, [cache, stableInput, mappedTextures, store]);
1405
1411
  return mappedTextures;
1406
1412
  }
1407
1413
  useTexture.preload = (url) => useLoader.preload(TextureLoader, url);
@@ -1472,13 +1478,13 @@ function useTextures(selector) {
1472
1478
  };
1473
1479
  }, [store]);
1474
1480
  const subscribe = selector ? () => selector(registry) : (state) => state.textures;
1475
- const selected = useThree(subscribe);
1481
+ const selected = useThree$1(subscribe);
1476
1482
  return selector ? selected : registry;
1477
1483
  }
1478
1484
 
1479
1485
  function useRenderTarget(widthOrOptions, heightOrOptions, options) {
1480
- const isLegacy = useThree((s) => s.isLegacy);
1481
- const size = useThree((s) => s.size);
1486
+ const isLegacy = useThree$1((s) => s.isLegacy);
1487
+ const size = useThree$1((s) => s.size);
1482
1488
  let width;
1483
1489
  let height;
1484
1490
  let opts;
@@ -1535,7 +1541,7 @@ function useEnvironment({
1535
1541
  const { extension, isCubemap } = getExtension(files);
1536
1542
  const loader = getLoader(extension);
1537
1543
  if (!loader) throw new Error("useEnvironment: Unrecognized file extension: " + files);
1538
- const renderer = useThree((state) => state.renderer);
1544
+ const renderer = useThree$1((state) => state.renderer);
1539
1545
  useLayoutEffect(() => {
1540
1546
  if (extension !== "webp" && extension !== "jpg" && extension !== "jpeg") return;
1541
1547
  function clearGainmapTexture() {
@@ -1628,7 +1634,7 @@ function useStore() {
1628
1634
  if (!store) throw new Error("R3F: Hooks can only be used within the Canvas component!");
1629
1635
  return store;
1630
1636
  }
1631
- function useThree(selector = (state) => state, equalityFn) {
1637
+ function useThree$1(selector = (state) => state, equalityFn) {
1632
1638
  return useStore()(selector, equalityFn);
1633
1639
  }
1634
1640
  function useInstanceHandle(ref) {
@@ -12959,7 +12965,10 @@ function releaseInternalPointerCapture(internal, obj, pointerId) {
12959
12965
  const captureData = pointerState.captured.get(obj);
12960
12966
  if (captureData) {
12961
12967
  pointerState.captured.delete(obj);
12962
- captureData.target.releasePointerCapture(pointerId);
12968
+ try {
12969
+ captureData.target.releasePointerCapture?.(pointerId);
12970
+ } catch {
12971
+ }
12963
12972
  }
12964
12973
  }
12965
12974
  function swapInteractivity(store, object, newObject) {
@@ -13053,7 +13062,9 @@ function createEvents(store) {
13053
13062
  state2.events.compute?.(event, state2, state2.previousRoot?.getState());
13054
13063
  if (state2.raycaster.camera === void 0) state2.raycaster.camera = null;
13055
13064
  }
13056
- return state2.raycaster.camera ? state2.raycaster.intersectObject(obj, true) : [];
13065
+ if (!state2.raycaster.camera) return [];
13066
+ obj.updateWorldMatrix(true, true);
13067
+ return state2.raycaster.intersectObject(obj, true);
13057
13068
  }
13058
13069
  let hits = eventsObjects.flatMap(handleRaycast).sort((a, b) => {
13059
13070
  const aInteractivePriority = a.object.userData?.interactivePriority;
@@ -14410,6 +14421,10 @@ function createRoot(canvas) {
14410
14421
  if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
14411
14422
  const renderer2 = state2.internal.actualRenderer;
14412
14423
  renderer2.setCanvasTarget(state2.internal.canvasTarget);
14424
+ if (state2.internal.canvasTargetSizeDirty) {
14425
+ state2.internal.canvasTargetSizeDirty = false;
14426
+ renderer2.backend?.updateSize?.();
14427
+ }
14413
14428
  }
14414
14429
  },
14415
14430
  {
@@ -14714,7 +14729,7 @@ function setEnvProps(background, scene, defaultScene, texture, sceneProps = {})
14714
14729
  };
14715
14730
  }
14716
14731
  function EnvironmentMap({ scene, background = false, map, ...config }) {
14717
- const defaultScene = useThree((state) => state.scene);
14732
+ const defaultScene = useThree$1((state) => state.scene);
14718
14733
  React.useLayoutEffect(() => {
14719
14734
  if (map) return setEnvProps(background, scene, defaultScene, map, config);
14720
14735
  });
@@ -14732,7 +14747,7 @@ function EnvironmentCube({
14732
14747
  ...rest
14733
14748
  }) {
14734
14749
  const texture = useEnvironment(rest);
14735
- const defaultScene = useThree((state) => state.scene);
14750
+ const defaultScene = useThree$1((state) => state.scene);
14736
14751
  React.useLayoutEffect(() => {
14737
14752
  return setEnvProps(background, scene, defaultScene, texture, {
14738
14753
  backgroundBlurriness: blur ?? backgroundBlurriness,
@@ -14769,9 +14784,9 @@ function EnvironmentPortal({
14769
14784
  preset = void 0,
14770
14785
  extensions
14771
14786
  }) {
14772
- const renderer = useThree((state) => state.renderer);
14773
- const isLegacy = useThree((state) => state.isLegacy);
14774
- const defaultScene = useThree((state) => state.scene);
14787
+ const renderer = useThree$1((state) => state.renderer);
14788
+ const isLegacy = useThree$1((state) => state.isLegacy);
14789
+ const defaultScene = useThree$1((state) => state.scene);
14775
14790
  const camera = React.useRef(null);
14776
14791
  const [virtualScene] = React.useState(() => new Scene());
14777
14792
  const fbo = React.useMemo(() => {
@@ -14815,7 +14830,7 @@ function EnvironmentPortal({
14815
14830
  environmentRotation
14816
14831
  ]);
14817
14832
  let count = 1;
14818
- useFrame(() => {
14833
+ useFrame$1(() => {
14819
14834
  if (frames === Infinity || count < frames) {
14820
14835
  const autoClear = renderer.autoClear;
14821
14836
  renderer.autoClear = true;
@@ -14855,7 +14870,7 @@ function EnvironmentGround(props) {
14855
14870
  ] });
14856
14871
  }
14857
14872
  function EnvironmentColor({ color, scene }) {
14858
- const defaultScene = useThree((state) => state.scene);
14873
+ const defaultScene = useThree$1((state) => state.scene);
14859
14874
  React.useLayoutEffect(() => {
14860
14875
  if (color === void 0) return;
14861
14876
  const target = resolveScene(scene || defaultScene);
@@ -15239,6 +15254,7 @@ function CanvasImpl({
15239
15254
  const canvas = canvasRef.current;
15240
15255
  if (canvas) {
15241
15256
  return () => {
15257
+ if (canvas.isConnected) return;
15242
15258
  unmountComponentAtNode(canvas);
15243
15259
  root.current = null;
15244
15260
  };
@@ -15449,6 +15465,11 @@ function createTextureOperations(set) {
15449
15465
  removeMultiple: (keys) => removeTextures(set, keys)
15450
15466
  };
15451
15467
  }
15468
+ function scopedNodeName(scope, name) {
15469
+ const raw = scope ? `${scope}_${name}` : name;
15470
+ const safe = raw.replace(/[^A-Za-z0-9_]/g, "_");
15471
+ return /^[A-Za-z_]/.test(safe) ? safe : `_${safe}`;
15472
+ }
15452
15473
  function extractTSLValue(value) {
15453
15474
  if (value === null || value === void 0) return value;
15454
15475
  if (typeof value !== "object") return value;
@@ -15647,8 +15668,7 @@ function createUniform(inName, node, scope) {
15647
15668
  const inValue = vectorize(node);
15648
15669
  const newUniform = uniform(inValue);
15649
15670
  if (typeof newUniform.setName === "function") {
15650
- const name = scope ? `${scope}_${inName}` : inName;
15651
- newUniform.setName(name);
15671
+ newUniform.setName(scopedNodeName(scope, inName));
15652
15672
  }
15653
15673
  return newUniform;
15654
15674
  }
@@ -15747,7 +15767,7 @@ function useNodes(creatorOrScope, scope) {
15747
15767
  return creatorOrScope(createLazyCreatorState(store.getState(), store));
15748
15768
  },
15749
15769
  prepare: (name, node) => {
15750
- node.setName?.(scope ? `${scope}.${name}` : name);
15770
+ node.setName?.(scopedNodeName(scope, name));
15751
15771
  return node;
15752
15772
  }
15753
15773
  });
@@ -15856,7 +15876,7 @@ function useBuffers(creatorOrScope, scope) {
15856
15876
  },
15857
15877
  prepare: (name, buffer) => {
15858
15878
  if ("setName" in buffer && typeof buffer.setName === "function") {
15859
- buffer.setName(scope ? `${scope}.${name}` : name);
15879
+ buffer.setName(scopedNodeName(scope, name));
15860
15880
  }
15861
15881
  return buffer;
15862
15882
  }
@@ -15927,7 +15947,7 @@ function useGPUStorage(creatorOrScope, scope) {
15927
15947
  return creatorOrScope(createLazyCreatorState(store.getState(), store));
15928
15948
  },
15929
15949
  prepare: (name, storage) => {
15930
- const label = scope ? `${scope}.${name}` : name;
15950
+ const label = scopedNodeName(scope, name);
15931
15951
  if ("setName" in storage && typeof storage.setName === "function") {
15932
15952
  storage.setName(label);
15933
15953
  }
@@ -15958,9 +15978,10 @@ function rebuildAllStorage(store, scope) {
15958
15978
 
15959
15979
  function useRenderPipeline(mainCB, setupCB) {
15960
15980
  const store = useStore();
15961
- const { scene, camera, renderer, isLegacy } = useThree();
15981
+ const { scene, camera, renderer, isLegacy } = useThree$1();
15962
15982
  const callbacksRanRef = useRef(false);
15963
15983
  const scenePassCacheRef = useRef(null);
15984
+ const forceScenePassRebuildRef = useRef(false);
15964
15985
  const mainCBRef = useRef(mainCB);
15965
15986
  const setupCBRef = useRef(setupCB);
15966
15987
  mainCBRef.current = mainCB;
@@ -15968,7 +15989,7 @@ function useRenderPipeline(mainCB, setupCB) {
15968
15989
  const [rebuildVersion, setRebuildVersion] = useState(0);
15969
15990
  useEffect(() => {
15970
15991
  callbacksRanRef.current = false;
15971
- scenePassCacheRef.current = null;
15992
+ forceScenePassRebuildRef.current = true;
15972
15993
  }, []);
15973
15994
  const clearPasses = useCallback(() => {
15974
15995
  store.setState({ passes: {} });
@@ -15978,12 +15999,14 @@ function useRenderPipeline(mainCB, setupCB) {
15978
15999
  renderPipeline: null,
15979
16000
  passes: {}
15980
16001
  });
16002
+ scenePassCacheRef.current?.scenePass?.dispose?.();
15981
16003
  callbacksRanRef.current = false;
15982
16004
  scenePassCacheRef.current = null;
16005
+ forceScenePassRebuildRef.current = false;
15983
16006
  }, [store]);
15984
16007
  const rebuild = useCallback(() => {
15985
16008
  callbacksRanRef.current = false;
15986
- scenePassCacheRef.current = null;
16009
+ forceScenePassRebuildRef.current = true;
15987
16010
  setRebuildVersion((v) => v + 1);
15988
16011
  }, []);
15989
16012
  useLayoutEffect(() => {
@@ -16001,16 +16024,23 @@ function useRenderPipeline(mainCB, setupCB) {
16001
16024
  pipeline = new RenderPipeline(renderer);
16002
16025
  justCreatedPipeline = true;
16003
16026
  }
16004
- const cacheValid = scenePassCacheRef.current && scenePassCacheRef.current.sceneUuid === scene.uuid && scenePassCacheRef.current.cameraUuid === camera.uuid;
16027
+ const cacheValid = !forceScenePassRebuildRef.current && scenePassCacheRef.current && scenePassCacheRef.current.sceneUuid === scene.uuid && scenePassCacheRef.current.cameraUuid === camera.uuid;
16028
+ let outgoingScenePass = null;
16005
16029
  let scenePass;
16006
16030
  if (cacheValid) {
16007
16031
  scenePass = scenePassCacheRef.current.scenePass;
16008
16032
  } else {
16033
+ outgoingScenePass = scenePassCacheRef.current?.scenePass ?? null;
16009
16034
  scenePass = pass(scene, camera);
16010
16035
  scenePassCacheRef.current = { sceneUuid: scene.uuid, cameraUuid: camera.uuid, scenePass };
16036
+ forceScenePassRebuildRef.current = false;
16011
16037
  }
16012
16038
  currentPasses.scenePass = scenePass;
16013
- if (!pipeline.outputNode || justCreatedPipeline) pipeline.outputNode = scenePass;
16039
+ let outputNodeChanged = false;
16040
+ if (!pipeline.outputNode || justCreatedPipeline || pipeline.outputNode === outgoingScenePass) {
16041
+ pipeline.outputNode = scenePass;
16042
+ outputNodeChanged = true;
16043
+ }
16014
16044
  set({ renderPipeline: pipeline, passes: currentPasses });
16015
16045
  const shouldRunCallbacks = justCreatedPipeline || !callbacksRanRef.current || !cacheValid;
16016
16046
  if (shouldRunCallbacks) {
@@ -16030,14 +16060,17 @@ function useRenderPipeline(mainCB, setupCB) {
16030
16060
  set({ passes: currentPasses });
16031
16061
  }
16032
16062
  }
16063
+ outputNodeChanged = true;
16033
16064
  callbacksRanRef.current = true;
16034
16065
  }
16066
+ if (outputNodeChanged) pipeline.needsUpdate = true;
16067
+ if (outgoingScenePass && outgoingScenePass !== scenePass) outgoingScenePass.dispose?.();
16035
16068
  } catch (error) {
16036
16069
  console.warn("[useRenderPipeline] Setup failed; the render pipeline was not configured:", error);
16037
16070
  }
16038
16071
  }, [store, renderer, scene, camera, isLegacy, rebuildVersion]);
16039
- const passes = useThree((s) => s.passes);
16040
- const renderPipeline = useThree((s) => s.renderPipeline);
16072
+ const passes = useThree$1((s) => s.passes);
16073
+ const renderPipeline = useThree$1((s) => s.renderPipeline);
16041
16074
  return {
16042
16075
  passes,
16043
16076
  renderPipeline,
@@ -16050,5 +16083,7 @@ function useRenderPipeline(mainCB, setupCB) {
16050
16083
  }
16051
16084
 
16052
16085
  extend(THREE);
16086
+ const useThree = useThree$1;
16087
+ const useFrame = useFrame$1;
16053
16088
 
16054
16089
  export { Block, Canvas, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, ErrorBoundary, FROM_REF, IsObject, ONCE, Portal, R3F_BUILD_LEGACY, R3F_BUILD_WEBGPU, REACT_INTERNAL_PROPS, RESERVED_PROPS, Texture, _roots, addAfterEffect, addEffect, addTail, advance, applyProps, attach, buildGraph, calculateDpr, clearNodeScope, clearRootNodes, clearRootUniforms, clearScope, context, createEvents, createPointerEvents, createPortal, createRoot, createScopedStore, createStore, createTextureOperations, detach, diffProps, dispose, createPointerEvents as events, extend, findInitialRoot, flushSync, fromRef, getInstanceProps, getPrimary, getPrimaryIds, getRootState, getUuidPrefix, hasConstructor, hasPrimary, invalidate, invalidateInstance, is, isColorRepresentation, isCopyable, isFromRef, isObject3D, isOnce, isOrthographicCamera, isRef$1 as isRef, isRenderer, isTexture, isVectorLike, once, prepare, presetsObj, rebuildAllBuffers, rebuildAllNodes, rebuildAllStorage, rebuildAllUniforms, reconciler, registerPrimary, removeInteractivity, removeNodes, removeUniforms, resolve, swapInteractivity, unmountComponentAtNode, unregisterPrimary, updateCamera, updateFrustum, useBridge, useBuffers, useEnvironment, useFrame, useGPUStorage, useGraph, useInstanceHandle, useIsomorphicLayoutEffect, useLoader, useLocalNodes, useMutableCallback, useNodes, useRenderPipeline, useRenderTarget, useStore, useTexture, useTextures, useThree, useUniform, useUniforms, waitForPrimary };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/fiber",
3
- "version": "10.0.0-canary.8f5b4d3",
3
+ "version": "10.0.0-canary.ac30da2",
4
4
  "description": "A React renderer for Threejs",
5
5
  "keywords": [
6
6
  "react",
@@ -35,7 +35,6 @@
35
35
  "sideEffects": false,
36
36
  "files": [
37
37
  "dist",
38
- "react-reconciler",
39
38
  "readme.md"
40
39
  ],
41
40
  "exports": {
@@ -53,7 +52,8 @@
53
52
  "types": "./dist/webgpu/index.d.ts",
54
53
  "import": "./dist/webgpu/index.mjs",
55
54
  "require": "./dist/webgpu/index.cjs"
56
- }
55
+ },
56
+ "./package.json": "./package.json"
57
57
  },
58
58
  "dependencies": {
59
59
  "@babel/runtime": "^7.28.6",
package/readme.md CHANGED
@@ -143,7 +143,7 @@ Live demo: https://codesandbox.io/s/icy-tree-brnsm?file=/src/App.tsx
143
143
  <details>
144
144
  <summary>Show React Native example</summary>
145
145
 
146
- This example relies on react 18 and uses `expo-cli`, but you can create a bare project with their template or with the `react-native` CLI.
146
+ This example uses `expo-cli`, but you can create a bare project with their template or with the `react-native` CLI.
147
147
 
148
148
  ```bash
149
149
  # Install expo-cli, this will create our app
@@ -1,7 +0,0 @@
1
- export const DiscreteEventPriority = 0b0000000000000000000000000000001;
2
- export const ContinuousEventPriority = 0b0000000000000000000000000000100;
3
- export const DefaultEventPriority = 0b0000000000000000000000000010000;
4
- export const IdleEventPriority = 0b0100000000000000000000000000000;
5
- export const LegacyRoot = 0;
6
- export const ConcurrentRoot = 1;
7
- export const NoEventPriority = 0;
@@ -1 +0,0 @@
1
- const t=1,o=8,r=32,e=2,i=268435456,n=0,s=0;export{t as ConcurrentRoot,o as ContinuousEventPriority,r as DefaultEventPriority,e as DiscreteEventPriority,i as IdleEventPriority,n as LegacyRoot,s as NoEventPriority};