@react-three/fiber 10.0.0-canary.aecbafb → 10.0.0-canary.c3fa45d

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/dist/legacy.cjs CHANGED
@@ -169,7 +169,7 @@ function useEnvironment({
169
169
  fiber.useLoader.clear(loader, multiFile ? [files] : files);
170
170
  }
171
171
  renderer.domElement.addEventListener("webglcontextlost", clearGainmapTexture, { once: true });
172
- }, [files, renderer.domElement]);
172
+ }, [extension, files, loader, multiFile, renderer.domElement]);
173
173
  const loaderResult = fiber.useLoader(
174
174
  loader,
175
175
  multiFile ? [files] : files,
@@ -369,7 +369,22 @@ function EnvironmentPortal({
369
369
  environmentIntensity,
370
370
  environmentRotation
371
371
  });
372
- }, [children, virtualScene, fbo.texture, scene, defaultScene, background, frames, gl]);
372
+ }, [
373
+ children,
374
+ virtualScene,
375
+ fbo.texture,
376
+ scene,
377
+ defaultScene,
378
+ background,
379
+ frames,
380
+ gl,
381
+ blur,
382
+ backgroundBlurriness,
383
+ backgroundIntensity,
384
+ backgroundRotation,
385
+ environmentIntensity,
386
+ environmentRotation
387
+ ]);
373
388
  let count = 1;
374
389
  fiber.useFrame(() => {
375
390
  if (frames === Infinity || count < frames) {
@@ -1296,7 +1311,7 @@ function createEvents(store) {
1296
1311
  }
1297
1312
  function processDeferredPointer(event, pointerId) {
1298
1313
  const state = store.getState();
1299
- const { onPointerMissed, onDragOverMissed, internal } = state;
1314
+ const { internal } = state;
1300
1315
  if (!state.events.enabled) return;
1301
1316
  const filter = filterPointerEvents;
1302
1317
  const hits = intersect(event, filter);
@@ -1531,6 +1546,7 @@ function createPointerEvents(store) {
1531
1546
  }
1532
1547
  },
1533
1548
  connect: (target) => {
1549
+ if (!target) return;
1534
1550
  const { set, events } = store.getState();
1535
1551
  events.disconnect?.();
1536
1552
  set((state) => ({ events: { ...state.events, connected: target } }));
@@ -1893,7 +1909,7 @@ function shouldRun(job, now) {
1893
1909
  const minInterval = 1e3 / job.fps;
1894
1910
  const lastRun = job.lastRun ?? 0;
1895
1911
  const elapsed = now - lastRun;
1896
- if (elapsed < minInterval) return false;
1912
+ if (elapsed < minInterval - 1) return false;
1897
1913
  if (job.drop) {
1898
1914
  job.lastRun = now;
1899
1915
  } else {
@@ -2920,14 +2936,16 @@ const createStore = (invalidate, advance) => {
2920
2936
  oldSize = size;
2921
2937
  oldDpr = viewport.dpr;
2922
2938
  updateCamera(camera, size);
2923
- if (canvasTarget) {
2939
+ if (internal.isSecondary && canvasTarget) {
2924
2940
  if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
2925
- const updateStyle = typeof HTMLCanvasElement !== "undefined" && canvasTarget.domElement instanceof HTMLCanvasElement;
2926
- canvasTarget.setSize(size.width, size.height, updateStyle);
2941
+ canvasTarget.setSize(size.width, size.height, false);
2927
2942
  } else {
2928
2943
  if (viewport.dpr > 0) actualRenderer.setPixelRatio(viewport.dpr);
2929
- const updateStyle = typeof HTMLCanvasElement !== "undefined" && actualRenderer.domElement instanceof HTMLCanvasElement;
2930
- actualRenderer.setSize(size.width, size.height, updateStyle);
2944
+ actualRenderer.setSize(size.width, size.height, false);
2945
+ if (canvasTarget) {
2946
+ if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
2947
+ canvasTarget.setSize(size.width, size.height, false);
2948
+ }
2931
2949
  }
2932
2950
  }
2933
2951
  if (camera !== oldCamera) {
@@ -15212,7 +15230,6 @@ function createRoot(canvas) {
15212
15230
  events,
15213
15231
  onCreated: onCreatedCallback,
15214
15232
  shadows = false,
15215
- textureColorSpace = three.SRGBColorSpace,
15216
15233
  orthographic = false,
15217
15234
  frameloop = "always",
15218
15235
  dpr = [1, 2],
@@ -15227,6 +15244,7 @@ function createRoot(canvas) {
15227
15244
  _sizeProps,
15228
15245
  forceEven
15229
15246
  } = props;
15247
+ const textureColorSpace = is.obj(glConfig) && !is.fun(glConfig) && !isRenderer(glConfig) && glConfig.textureColorSpace || is.obj(rendererConfig) && !is.fun(rendererConfig) && !isRenderer(rendererConfig) && rendererConfig.textureColorSpace || three.SRGBColorSpace;
15230
15248
  const state = store.getState();
15231
15249
  const defaultGLProps = {
15232
15250
  canvas,
@@ -15350,7 +15368,7 @@ function createRoot(canvas) {
15350
15368
  lastConfiguredProps.performance = performance;
15351
15369
  }
15352
15370
  if (!state.xr) {
15353
- const handleXRFrame = (timestamp, frame) => {
15371
+ const handleXRFrame = (timestamp, _frame) => {
15354
15372
  const state2 = store.getState();
15355
15373
  if (state2.frameloop === "never") return;
15356
15374
  advance(timestamp);
@@ -15386,15 +15404,22 @@ function createRoot(canvas) {
15386
15404
  const oldType = renderer.shadowMap.type;
15387
15405
  renderer.shadowMap.enabled = !!shadows;
15388
15406
  if (is.boo(shadows)) {
15389
- renderer.shadowMap.type = three.PCFSoftShadowMap;
15407
+ renderer.shadowMap.type = three.PCFShadowMap;
15390
15408
  } else if (is.str(shadows)) {
15409
+ if (shadows === "soft") {
15410
+ notifyDepreciated({
15411
+ heading: 'shadows="soft" is deprecated',
15412
+ body: "Three has depreciated soft and improved basic PCFShadows, we converted for you.",
15413
+ link: "https://github.com/mrdoob/three.js/wiki/Migration-Guide?utm_source=chatgpt.com#181--182"
15414
+ });
15415
+ }
15391
15416
  const types = {
15392
15417
  basic: three.BasicShadowMap,
15393
15418
  percentage: three.PCFShadowMap,
15394
- soft: three.PCFSoftShadowMap,
15419
+ soft: three.PCFShadowMap,
15395
15420
  variance: three.VSMShadowMap
15396
15421
  };
15397
- renderer.shadowMap.type = types[shadows] ?? three.PCFSoftShadowMap;
15422
+ renderer.shadowMap.type = types[shadows] ?? three.PCFShadowMap;
15398
15423
  } else if (is.obj(shadows)) {
15399
15424
  Object.assign(renderer.shadowMap, shadows);
15400
15425
  }
@@ -15410,13 +15435,24 @@ function createRoot(canvas) {
15410
15435
  if (state.textureColorSpace !== textureColorSpace) state.set(() => ({ textureColorSpace }));
15411
15436
  lastConfiguredProps.textureColorSpace = textureColorSpace;
15412
15437
  }
15438
+ const r3fProps = ["textureColorSpace"];
15439
+ const constructorOnlyProps = ["samples", "antialias", "alpha", "canvas", "powerPreference"];
15440
+ const nonApplyProps = [...r3fProps, ...constructorOnlyProps];
15413
15441
  if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, renderer, shallowLoose)) {
15414
- applyProps(renderer, glConfig);
15442
+ const glProps = {};
15443
+ for (const key in glConfig) {
15444
+ if (!nonApplyProps.includes(key)) glProps[key] = glConfig[key];
15445
+ }
15446
+ applyProps(renderer, glProps);
15415
15447
  }
15416
15448
  if (rendererConfig && !is.fun(rendererConfig) && !isRenderer(rendererConfig) && state.renderer) {
15417
15449
  const currentRenderer = state.renderer;
15418
15450
  if (!is.equ(rendererConfig, currentRenderer, shallowLoose)) {
15419
- applyProps(currentRenderer, rendererConfig);
15451
+ const rendererProps = {};
15452
+ for (const key in rendererConfig) {
15453
+ if (!nonApplyProps.includes(key)) rendererProps[key] = rendererConfig[key];
15454
+ }
15455
+ applyProps(currentRenderer, rendererProps);
15420
15456
  }
15421
15457
  }
15422
15458
  const scheduler = getScheduler();
@@ -15730,8 +15766,18 @@ function CanvasImpl({
15730
15766
  forceEven,
15731
15767
  ...props
15732
15768
  }) {
15733
- const { primaryCanvas, scheduler, ...rendererConfig } = typeof rendererProp === "object" && rendererProp !== null && !("render" in rendererProp) && ("primaryCanvas" in rendererProp || "scheduler" in rendererProp) ? rendererProp : { primaryCanvas: void 0, scheduler: void 0 };
15734
- const renderer = Object.keys(rendererConfig).length > 0 ? rendererConfig : rendererProp;
15769
+ const isRendererConfig = typeof rendererProp === "object" && rendererProp !== null && !("render" in rendererProp) && ("primaryCanvas" in rendererProp || "scheduler" in rendererProp);
15770
+ let primaryCanvas;
15771
+ let scheduler;
15772
+ let renderer;
15773
+ if (isRendererConfig) {
15774
+ const { primaryCanvas: pc, scheduler: sc, ...rest } = rendererProp;
15775
+ primaryCanvas = pc;
15776
+ scheduler = sc;
15777
+ renderer = Object.keys(rest).length > 0 ? rest : rendererProp;
15778
+ } else {
15779
+ renderer = rendererProp;
15780
+ }
15735
15781
  React__namespace.useMemo(() => extend(THREE), []);
15736
15782
  const Bridge = useBridge();
15737
15783
  const backgroundProps = React__namespace.useMemo(() => {
@@ -15941,7 +15987,16 @@ function CanvasImpl({
15941
15987
  ...style
15942
15988
  },
15943
15989
  ...props,
15944
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className: "r3f-canvas-container", style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx("canvas", { ref: canvasRef, id, className: "r3f-canvas", style: { display: "block" }, children: fallback }) })
15990
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className: "r3f-canvas-container", style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
15991
+ "canvas",
15992
+ {
15993
+ ref: canvasRef,
15994
+ id,
15995
+ className: "r3f-canvas",
15996
+ style: { display: "block", width: "100%", height: "100%" },
15997
+ children: fallback
15998
+ }
15999
+ ) })
15945
16000
  }
15946
16001
  );
15947
16002
  }
package/dist/legacy.d.cts CHANGED
@@ -854,6 +854,20 @@ interface Renderer {
854
854
  render: (scene: THREE$1.Scene, camera: THREE$1.Camera) => any
855
855
  }
856
856
 
857
+ //* Color Management Config ==============================
858
+
859
+ /**
860
+ * Color management configuration shared by both WebGL and WebGPU renderers.
861
+ */
862
+ interface ColorManagementConfig {
863
+ /**
864
+ * Color space assigned to 8-bit input textures (color maps).
865
+ * Defaults to sRGB. Most textures are authored in sRGB.
866
+ * @default THREE.SRGBColorSpace
867
+ */
868
+ textureColorSpace?: THREE$1.ColorSpace
869
+ }
870
+
857
871
  //* WebGL Renderer Props ==============================
858
872
 
859
873
  type DefaultGLProps = Omit<THREE$1.WebGLRendererParameters, 'canvas'> & {
@@ -864,7 +878,7 @@ type GLProps =
864
878
  | Renderer
865
879
  | ((defaultProps: DefaultGLProps) => Renderer)
866
880
  | ((defaultProps: DefaultGLProps) => Promise<Renderer>)
867
- | Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters>
881
+ | (Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters> & ColorManagementConfig)
868
882
 
869
883
  //* WebGPU Renderer Props ==============================
870
884
 
@@ -890,9 +904,9 @@ interface CanvasSchedulerConfig {
890
904
  }
891
905
 
892
906
  /**
893
- * Extended renderer configuration for multi-canvas support.
907
+ * Extended renderer configuration for multi-canvas support and color management.
894
908
  */
895
- interface RendererConfigExtended {
909
+ interface RendererConfigExtended extends ColorManagementConfig {
896
910
  /** Share renderer from another canvas (WebGPU only) */
897
911
  primaryCanvas?: string
898
912
  /** Canvas-level scheduler options */
@@ -957,8 +971,6 @@ interface RenderProps<TCanvas extends HTMLCanvasElement | OffscreenCanvas$1> {
957
971
  * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
958
972
  */
959
973
  shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE$1.WebGLShadowMap>
960
- /** Color space assigned to 8-bit input textures (color maps). Defaults to sRGB. Most textures are authored in sRGB. */
961
- textureColorSpace?: THREE$1.ColorSpace
962
974
  /** Creates an orthographic camera */
963
975
  orthographic?: boolean
964
976
  /**
@@ -1211,7 +1223,7 @@ interface CanvasProps
1211
1223
  */
1212
1224
  resize?: Options
1213
1225
  /** The target where events are being subscribed to, default: the div that wraps canvas */
1214
- eventSource?: HTMLElement | React$1.RefObject<HTMLElement>
1226
+ eventSource?: HTMLElement | React$1.RefObject<HTMLElement | null>
1215
1227
  /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
1216
1228
  eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen'
1217
1229
  /** Enable/disable automatic HMR refresh for TSL nodes and uniforms, default: true in dev */
@@ -4366,4 +4378,4 @@ declare function isOnce(value: unknown): value is {
4366
4378
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
4367
4379
 
4368
4380
  export { Block, Canvas, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, ErrorBoundary, FROM_REF, IsObject, ONCE, Portal, R3F_BUILD_LEGACY, R3F_BUILD_WEBGPU, REACT_INTERNAL_PROPS, RESERVED_PROPS, three_d as ReactThreeFiber, Scheduler, Texture, _roots, act, addAfterEffect, addEffect, addTail, advance, applyProps, attach, buildGraph, calculateDpr, context, createEvents, createPointerEvents, createPortal, createRoot, createStore, detach, diffProps, dispose, createPointerEvents as events, extend, findInitialRoot, flushSync, fromRef, getInstanceProps, getPrimary, getPrimaryIds, getRootState, getScheduler, getUuidPrefix, hasConstructor, hasPrimary, invalidate, invalidateInstance, is, isColorRepresentation, isCopyable, isFromRef, isObject3D, isOnce, isOrthographicCamera, isRef, isRenderer, isTexture, isVectorLike, once, prepare, presetsObj, reconciler, registerPrimary, removeInteractivity, resolve, unmountComponentAtNode, unregisterPrimary, updateCamera, updateFrustum, useBridge, useEnvironment, useFrame, useGraph, useInstanceHandle, useIsomorphicLayoutEffect, useLoader, useMutableCallback, useRenderTarget, useStore, useTexture, useTextures, useThree, waitForPrimary };
4369
- export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
4381
+ export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/legacy.d.mts CHANGED
@@ -854,6 +854,20 @@ interface Renderer {
854
854
  render: (scene: THREE$1.Scene, camera: THREE$1.Camera) => any
855
855
  }
856
856
 
857
+ //* Color Management Config ==============================
858
+
859
+ /**
860
+ * Color management configuration shared by both WebGL and WebGPU renderers.
861
+ */
862
+ interface ColorManagementConfig {
863
+ /**
864
+ * Color space assigned to 8-bit input textures (color maps).
865
+ * Defaults to sRGB. Most textures are authored in sRGB.
866
+ * @default THREE.SRGBColorSpace
867
+ */
868
+ textureColorSpace?: THREE$1.ColorSpace
869
+ }
870
+
857
871
  //* WebGL Renderer Props ==============================
858
872
 
859
873
  type DefaultGLProps = Omit<THREE$1.WebGLRendererParameters, 'canvas'> & {
@@ -864,7 +878,7 @@ type GLProps =
864
878
  | Renderer
865
879
  | ((defaultProps: DefaultGLProps) => Renderer)
866
880
  | ((defaultProps: DefaultGLProps) => Promise<Renderer>)
867
- | Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters>
881
+ | (Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters> & ColorManagementConfig)
868
882
 
869
883
  //* WebGPU Renderer Props ==============================
870
884
 
@@ -890,9 +904,9 @@ interface CanvasSchedulerConfig {
890
904
  }
891
905
 
892
906
  /**
893
- * Extended renderer configuration for multi-canvas support.
907
+ * Extended renderer configuration for multi-canvas support and color management.
894
908
  */
895
- interface RendererConfigExtended {
909
+ interface RendererConfigExtended extends ColorManagementConfig {
896
910
  /** Share renderer from another canvas (WebGPU only) */
897
911
  primaryCanvas?: string
898
912
  /** Canvas-level scheduler options */
@@ -957,8 +971,6 @@ interface RenderProps<TCanvas extends HTMLCanvasElement | OffscreenCanvas$1> {
957
971
  * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
958
972
  */
959
973
  shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE$1.WebGLShadowMap>
960
- /** Color space assigned to 8-bit input textures (color maps). Defaults to sRGB. Most textures are authored in sRGB. */
961
- textureColorSpace?: THREE$1.ColorSpace
962
974
  /** Creates an orthographic camera */
963
975
  orthographic?: boolean
964
976
  /**
@@ -1211,7 +1223,7 @@ interface CanvasProps
1211
1223
  */
1212
1224
  resize?: Options
1213
1225
  /** The target where events are being subscribed to, default: the div that wraps canvas */
1214
- eventSource?: HTMLElement | React$1.RefObject<HTMLElement>
1226
+ eventSource?: HTMLElement | React$1.RefObject<HTMLElement | null>
1215
1227
  /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
1216
1228
  eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen'
1217
1229
  /** Enable/disable automatic HMR refresh for TSL nodes and uniforms, default: true in dev */
@@ -4366,4 +4378,4 @@ declare function isOnce(value: unknown): value is {
4366
4378
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
4367
4379
 
4368
4380
  export { Block, Canvas, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, ErrorBoundary, FROM_REF, IsObject, ONCE, Portal, R3F_BUILD_LEGACY, R3F_BUILD_WEBGPU, REACT_INTERNAL_PROPS, RESERVED_PROPS, three_d as ReactThreeFiber, Scheduler, Texture, _roots, act, addAfterEffect, addEffect, addTail, advance, applyProps, attach, buildGraph, calculateDpr, context, createEvents, createPointerEvents, createPortal, createRoot, createStore, detach, diffProps, dispose, createPointerEvents as events, extend, findInitialRoot, flushSync, fromRef, getInstanceProps, getPrimary, getPrimaryIds, getRootState, getScheduler, getUuidPrefix, hasConstructor, hasPrimary, invalidate, invalidateInstance, is, isColorRepresentation, isCopyable, isFromRef, isObject3D, isOnce, isOrthographicCamera, isRef, isRenderer, isTexture, isVectorLike, once, prepare, presetsObj, reconciler, registerPrimary, removeInteractivity, resolve, unmountComponentAtNode, unregisterPrimary, updateCamera, updateFrustum, useBridge, useEnvironment, useFrame, useGraph, useInstanceHandle, useIsomorphicLayoutEffect, useLoader, useMutableCallback, useRenderTarget, useStore, useTexture, useTextures, useThree, waitForPrimary };
4369
- export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
4381
+ export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/legacy.d.ts CHANGED
@@ -854,6 +854,20 @@ interface Renderer {
854
854
  render: (scene: THREE$1.Scene, camera: THREE$1.Camera) => any
855
855
  }
856
856
 
857
+ //* Color Management Config ==============================
858
+
859
+ /**
860
+ * Color management configuration shared by both WebGL and WebGPU renderers.
861
+ */
862
+ interface ColorManagementConfig {
863
+ /**
864
+ * Color space assigned to 8-bit input textures (color maps).
865
+ * Defaults to sRGB. Most textures are authored in sRGB.
866
+ * @default THREE.SRGBColorSpace
867
+ */
868
+ textureColorSpace?: THREE$1.ColorSpace
869
+ }
870
+
857
871
  //* WebGL Renderer Props ==============================
858
872
 
859
873
  type DefaultGLProps = Omit<THREE$1.WebGLRendererParameters, 'canvas'> & {
@@ -864,7 +878,7 @@ type GLProps =
864
878
  | Renderer
865
879
  | ((defaultProps: DefaultGLProps) => Renderer)
866
880
  | ((defaultProps: DefaultGLProps) => Promise<Renderer>)
867
- | Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters>
881
+ | (Partial<Properties<THREE$1.WebGLRenderer> | THREE$1.WebGLRendererParameters> & ColorManagementConfig)
868
882
 
869
883
  //* WebGPU Renderer Props ==============================
870
884
 
@@ -890,9 +904,9 @@ interface CanvasSchedulerConfig {
890
904
  }
891
905
 
892
906
  /**
893
- * Extended renderer configuration for multi-canvas support.
907
+ * Extended renderer configuration for multi-canvas support and color management.
894
908
  */
895
- interface RendererConfigExtended {
909
+ interface RendererConfigExtended extends ColorManagementConfig {
896
910
  /** Share renderer from another canvas (WebGPU only) */
897
911
  primaryCanvas?: string
898
912
  /** Canvas-level scheduler options */
@@ -957,8 +971,6 @@ interface RenderProps<TCanvas extends HTMLCanvasElement | OffscreenCanvas$1> {
957
971
  * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.shadowMap
958
972
  */
959
973
  shadows?: boolean | 'basic' | 'percentage' | 'soft' | 'variance' | Partial<THREE$1.WebGLShadowMap>
960
- /** Color space assigned to 8-bit input textures (color maps). Defaults to sRGB. Most textures are authored in sRGB. */
961
- textureColorSpace?: THREE$1.ColorSpace
962
974
  /** Creates an orthographic camera */
963
975
  orthographic?: boolean
964
976
  /**
@@ -1211,7 +1223,7 @@ interface CanvasProps
1211
1223
  */
1212
1224
  resize?: Options
1213
1225
  /** The target where events are being subscribed to, default: the div that wraps canvas */
1214
- eventSource?: HTMLElement | React$1.RefObject<HTMLElement>
1226
+ eventSource?: HTMLElement | React$1.RefObject<HTMLElement | null>
1215
1227
  /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
1216
1228
  eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen'
1217
1229
  /** Enable/disable automatic HMR refresh for TSL nodes and uniforms, default: true in dev */
@@ -4366,4 +4378,4 @@ declare function isOnce(value: unknown): value is {
4366
4378
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
4367
4379
 
4368
4380
  export { Block, Canvas, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, ErrorBoundary, FROM_REF, IsObject, ONCE, Portal, R3F_BUILD_LEGACY, R3F_BUILD_WEBGPU, REACT_INTERNAL_PROPS, RESERVED_PROPS, three_d as ReactThreeFiber, Scheduler, Texture, _roots, act, addAfterEffect, addEffect, addTail, advance, applyProps, attach, buildGraph, calculateDpr, context, createEvents, createPointerEvents, createPortal, createRoot, createStore, detach, diffProps, dispose, createPointerEvents as events, extend, findInitialRoot, flushSync, fromRef, getInstanceProps, getPrimary, getPrimaryIds, getRootState, getScheduler, getUuidPrefix, hasConstructor, hasPrimary, invalidate, invalidateInstance, is, isColorRepresentation, isCopyable, isFromRef, isObject3D, isOnce, isOrthographicCamera, isRef, isRenderer, isTexture, isVectorLike, once, prepare, presetsObj, reconciler, registerPrimary, removeInteractivity, resolve, unmountComponentAtNode, unregisterPrimary, updateCamera, updateFrustum, useBridge, useEnvironment, useFrame, useGraph, useInstanceHandle, useIsomorphicLayoutEffect, useLoader, useMutableCallback, useRenderTarget, useStore, useTexture, useTextures, useThree, waitForPrimary };
4369
- export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
4381
+ export type { Act, AddPhaseOptions, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameControls, FrameNextCallback, FrameNextControls, FrameNextState, FrameState, FrameTimingState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, LegacyInternalState as InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Layers, LegacyInternalState, LegacyRenderer, LegacyRootState, LoaderInstance, LoaderLike, LoaderResult, MappedTextureType, MathProps, MathRepresentation, MathType, MathTypes, Matrix3, Matrix4, Mutable, MutableOrReadonlyParameters, NodeProps, NonFunctionKeys, ObjectMap, OffscreenCanvas$1 as OffscreenCanvas, Overwrite, Performance, PointerCaptureTarget, PointerState, PresetsType, PrimaryCanvasEntry, Properties, Quaternion, LegacyRenderer as R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootOptions, LegacyRootState as RootState, RootStore, SchedulerApi, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureEntry, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseFrameNextOptions, UseFrameOptions, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/legacy.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { WebGLRenderTarget, CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader, Scene, WebGLCubeRenderTarget, HalfFloatType, Color, Frustum, Matrix4, Group, BoxGeometry, MeshBasicNodeMaterial, Mesh, Node, NodeUpdateType, Layers, SRGBColorSpace, RGBAFormat, UnsignedByteType, Vector3, Vector2, TextureLoader, Texture as Texture$1, Raycaster, OrthographicCamera, PerspectiveCamera, PCFSoftShadowMap, VSMShadowMap, PCFShadowMap, BasicShadowMap, ACESFilmicToneMapping, WebGLRenderer } from 'three';
2
+ import { WebGLRenderTarget, CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader, Scene, WebGLCubeRenderTarget, HalfFloatType, Color, Frustum, Matrix4, Group, BoxGeometry, MeshBasicNodeMaterial, Mesh, Node, NodeUpdateType, Layers, SRGBColorSpace, RGBAFormat, UnsignedByteType, Vector3, Vector2, TextureLoader, Texture as Texture$1, Raycaster, OrthographicCamera, PerspectiveCamera, PCFShadowMap, VSMShadowMap, BasicShadowMap, ACESFilmicToneMapping, WebGLRenderer } from 'three';
3
3
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
4
4
  import * as React from 'react';
5
5
  import React__default, { useLayoutEffect, useRef, useMemo, useEffect, useContext, useImperativeHandle, useCallback, useState } from 'react';
@@ -148,7 +148,7 @@ function useEnvironment({
148
148
  useLoader$1.clear(loader, multiFile ? [files] : files);
149
149
  }
150
150
  renderer.domElement.addEventListener("webglcontextlost", clearGainmapTexture, { once: true });
151
- }, [files, renderer.domElement]);
151
+ }, [extension, files, loader, multiFile, renderer.domElement]);
152
152
  const loaderResult = useLoader$1(
153
153
  loader,
154
154
  multiFile ? [files] : files,
@@ -348,7 +348,22 @@ function EnvironmentPortal({
348
348
  environmentIntensity,
349
349
  environmentRotation
350
350
  });
351
- }, [children, virtualScene, fbo.texture, scene, defaultScene, background, frames, gl]);
351
+ }, [
352
+ children,
353
+ virtualScene,
354
+ fbo.texture,
355
+ scene,
356
+ defaultScene,
357
+ background,
358
+ frames,
359
+ gl,
360
+ blur,
361
+ backgroundBlurriness,
362
+ backgroundIntensity,
363
+ backgroundRotation,
364
+ environmentIntensity,
365
+ environmentRotation
366
+ ]);
352
367
  let count = 1;
353
368
  useFrame$1(() => {
354
369
  if (frames === Infinity || count < frames) {
@@ -1275,7 +1290,7 @@ function createEvents(store) {
1275
1290
  }
1276
1291
  function processDeferredPointer(event, pointerId) {
1277
1292
  const state = store.getState();
1278
- const { onPointerMissed, onDragOverMissed, internal } = state;
1293
+ const { internal } = state;
1279
1294
  if (!state.events.enabled) return;
1280
1295
  const filter = filterPointerEvents;
1281
1296
  const hits = intersect(event, filter);
@@ -1510,6 +1525,7 @@ function createPointerEvents(store) {
1510
1525
  }
1511
1526
  },
1512
1527
  connect: (target) => {
1528
+ if (!target) return;
1513
1529
  const { set, events } = store.getState();
1514
1530
  events.disconnect?.();
1515
1531
  set((state) => ({ events: { ...state.events, connected: target } }));
@@ -1872,7 +1888,7 @@ function shouldRun(job, now) {
1872
1888
  const minInterval = 1e3 / job.fps;
1873
1889
  const lastRun = job.lastRun ?? 0;
1874
1890
  const elapsed = now - lastRun;
1875
- if (elapsed < minInterval) return false;
1891
+ if (elapsed < minInterval - 1) return false;
1876
1892
  if (job.drop) {
1877
1893
  job.lastRun = now;
1878
1894
  } else {
@@ -2899,14 +2915,16 @@ const createStore = (invalidate, advance) => {
2899
2915
  oldSize = size;
2900
2916
  oldDpr = viewport.dpr;
2901
2917
  updateCamera(camera, size);
2902
- if (canvasTarget) {
2918
+ if (internal.isSecondary && canvasTarget) {
2903
2919
  if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
2904
- const updateStyle = typeof HTMLCanvasElement !== "undefined" && canvasTarget.domElement instanceof HTMLCanvasElement;
2905
- canvasTarget.setSize(size.width, size.height, updateStyle);
2920
+ canvasTarget.setSize(size.width, size.height, false);
2906
2921
  } else {
2907
2922
  if (viewport.dpr > 0) actualRenderer.setPixelRatio(viewport.dpr);
2908
- const updateStyle = typeof HTMLCanvasElement !== "undefined" && actualRenderer.domElement instanceof HTMLCanvasElement;
2909
- actualRenderer.setSize(size.width, size.height, updateStyle);
2923
+ actualRenderer.setSize(size.width, size.height, false);
2924
+ if (canvasTarget) {
2925
+ if (viewport.dpr > 0) canvasTarget.setPixelRatio(viewport.dpr);
2926
+ canvasTarget.setSize(size.width, size.height, false);
2927
+ }
2910
2928
  }
2911
2929
  }
2912
2930
  if (camera !== oldCamera) {
@@ -15191,7 +15209,6 @@ function createRoot(canvas) {
15191
15209
  events,
15192
15210
  onCreated: onCreatedCallback,
15193
15211
  shadows = false,
15194
- textureColorSpace = SRGBColorSpace,
15195
15212
  orthographic = false,
15196
15213
  frameloop = "always",
15197
15214
  dpr = [1, 2],
@@ -15206,6 +15223,7 @@ function createRoot(canvas) {
15206
15223
  _sizeProps,
15207
15224
  forceEven
15208
15225
  } = props;
15226
+ const textureColorSpace = is.obj(glConfig) && !is.fun(glConfig) && !isRenderer(glConfig) && glConfig.textureColorSpace || is.obj(rendererConfig) && !is.fun(rendererConfig) && !isRenderer(rendererConfig) && rendererConfig.textureColorSpace || SRGBColorSpace;
15209
15227
  const state = store.getState();
15210
15228
  const defaultGLProps = {
15211
15229
  canvas,
@@ -15329,7 +15347,7 @@ function createRoot(canvas) {
15329
15347
  lastConfiguredProps.performance = performance;
15330
15348
  }
15331
15349
  if (!state.xr) {
15332
- const handleXRFrame = (timestamp, frame) => {
15350
+ const handleXRFrame = (timestamp, _frame) => {
15333
15351
  const state2 = store.getState();
15334
15352
  if (state2.frameloop === "never") return;
15335
15353
  advance(timestamp);
@@ -15365,15 +15383,22 @@ function createRoot(canvas) {
15365
15383
  const oldType = renderer.shadowMap.type;
15366
15384
  renderer.shadowMap.enabled = !!shadows;
15367
15385
  if (is.boo(shadows)) {
15368
- renderer.shadowMap.type = PCFSoftShadowMap;
15386
+ renderer.shadowMap.type = PCFShadowMap;
15369
15387
  } else if (is.str(shadows)) {
15388
+ if (shadows === "soft") {
15389
+ notifyDepreciated({
15390
+ heading: 'shadows="soft" is deprecated',
15391
+ body: "Three has depreciated soft and improved basic PCFShadows, we converted for you.",
15392
+ link: "https://github.com/mrdoob/three.js/wiki/Migration-Guide?utm_source=chatgpt.com#181--182"
15393
+ });
15394
+ }
15370
15395
  const types = {
15371
15396
  basic: BasicShadowMap,
15372
15397
  percentage: PCFShadowMap,
15373
- soft: PCFSoftShadowMap,
15398
+ soft: PCFShadowMap,
15374
15399
  variance: VSMShadowMap
15375
15400
  };
15376
- renderer.shadowMap.type = types[shadows] ?? PCFSoftShadowMap;
15401
+ renderer.shadowMap.type = types[shadows] ?? PCFShadowMap;
15377
15402
  } else if (is.obj(shadows)) {
15378
15403
  Object.assign(renderer.shadowMap, shadows);
15379
15404
  }
@@ -15389,13 +15414,24 @@ function createRoot(canvas) {
15389
15414
  if (state.textureColorSpace !== textureColorSpace) state.set(() => ({ textureColorSpace }));
15390
15415
  lastConfiguredProps.textureColorSpace = textureColorSpace;
15391
15416
  }
15417
+ const r3fProps = ["textureColorSpace"];
15418
+ const constructorOnlyProps = ["samples", "antialias", "alpha", "canvas", "powerPreference"];
15419
+ const nonApplyProps = [...r3fProps, ...constructorOnlyProps];
15392
15420
  if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, renderer, shallowLoose)) {
15393
- applyProps(renderer, glConfig);
15421
+ const glProps = {};
15422
+ for (const key in glConfig) {
15423
+ if (!nonApplyProps.includes(key)) glProps[key] = glConfig[key];
15424
+ }
15425
+ applyProps(renderer, glProps);
15394
15426
  }
15395
15427
  if (rendererConfig && !is.fun(rendererConfig) && !isRenderer(rendererConfig) && state.renderer) {
15396
15428
  const currentRenderer = state.renderer;
15397
15429
  if (!is.equ(rendererConfig, currentRenderer, shallowLoose)) {
15398
- applyProps(currentRenderer, rendererConfig);
15430
+ const rendererProps = {};
15431
+ for (const key in rendererConfig) {
15432
+ if (!nonApplyProps.includes(key)) rendererProps[key] = rendererConfig[key];
15433
+ }
15434
+ applyProps(currentRenderer, rendererProps);
15399
15435
  }
15400
15436
  }
15401
15437
  const scheduler = getScheduler();
@@ -15709,8 +15745,18 @@ function CanvasImpl({
15709
15745
  forceEven,
15710
15746
  ...props
15711
15747
  }) {
15712
- const { primaryCanvas, scheduler, ...rendererConfig } = typeof rendererProp === "object" && rendererProp !== null && !("render" in rendererProp) && ("primaryCanvas" in rendererProp || "scheduler" in rendererProp) ? rendererProp : { primaryCanvas: void 0, scheduler: void 0 };
15713
- const renderer = Object.keys(rendererConfig).length > 0 ? rendererConfig : rendererProp;
15748
+ const isRendererConfig = typeof rendererProp === "object" && rendererProp !== null && !("render" in rendererProp) && ("primaryCanvas" in rendererProp || "scheduler" in rendererProp);
15749
+ let primaryCanvas;
15750
+ let scheduler;
15751
+ let renderer;
15752
+ if (isRendererConfig) {
15753
+ const { primaryCanvas: pc, scheduler: sc, ...rest } = rendererProp;
15754
+ primaryCanvas = pc;
15755
+ scheduler = sc;
15756
+ renderer = Object.keys(rest).length > 0 ? rest : rendererProp;
15757
+ } else {
15758
+ renderer = rendererProp;
15759
+ }
15714
15760
  React.useMemo(() => extend(THREE), []);
15715
15761
  const Bridge = useBridge();
15716
15762
  const backgroundProps = React.useMemo(() => {
@@ -15920,7 +15966,16 @@ function CanvasImpl({
15920
15966
  ...style
15921
15967
  },
15922
15968
  ...props,
15923
- children: /* @__PURE__ */ jsx("div", { ref: containerRef, className: "r3f-canvas-container", style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx("canvas", { ref: canvasRef, id, className: "r3f-canvas", style: { display: "block" }, children: fallback }) })
15969
+ children: /* @__PURE__ */ jsx("div", { ref: containerRef, className: "r3f-canvas-container", style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsx(
15970
+ "canvas",
15971
+ {
15972
+ ref: canvasRef,
15973
+ id,
15974
+ className: "r3f-canvas",
15975
+ style: { display: "block", width: "100%", height: "100%" },
15976
+ children: fallback
15977
+ }
15978
+ ) })
15924
15979
  }
15925
15980
  );
15926
15981
  }