@react-three/fiber 10.0.0-canary.c49d4cb → 10.0.0-canary.c5c1a94

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/index.cjs CHANGED
@@ -454,7 +454,6 @@ function Environment(props) {
454
454
  var __defProp = Object.defineProperty;
455
455
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
456
456
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
457
- const act = React__namespace["act"];
458
457
  const useIsomorphicLayoutEffect = /* @__PURE__ */ (() => typeof window !== "undefined" && (window.document?.createElement || window.navigator?.product === "ReactNative"))() ? React__namespace.useLayoutEffect : React__namespace.useEffect;
459
458
  function useMutableCallback(fn) {
460
459
  const ref = React__namespace.useRef(fn);
@@ -958,9 +957,9 @@ function diffProps(instance, newProps) {
958
957
  const { root, key } = resolve(instance.object, prop);
959
958
  if (root.constructor && root.constructor.length === 0) {
960
959
  const ctor = getMemoizedPrototype(root);
961
- if (!is.und(ctor)) changedProps[key] = ctor[key];
960
+ if (!is.und(ctor)) changedProps[prop] = ctor[key];
962
961
  } else {
963
- changedProps[key] = 0;
962
+ changedProps[prop] = 0;
964
963
  }
965
964
  }
966
965
  return changedProps;
@@ -13695,7 +13694,7 @@ function n0() {
13695
13694
  var t0 = n0();
13696
13695
  const r0 = Xb(t0);
13697
13696
 
13698
- const t = 1, o = 8, r = 32, e = 2;
13697
+ const t = 1, o = 8, r = 32, e = 2, i$1 = 268435456;
13699
13698
 
13700
13699
  function createReconciler(config) {
13701
13700
  const reconciler2 = r0(config);
@@ -13860,7 +13859,15 @@ function setFiberRef(fiber, publicInstance) {
13860
13859
  }
13861
13860
  }
13862
13861
  const reconstructed = [];
13863
- function swapInstances() {
13862
+ function flushReconstructedInstances() {
13863
+ if (reconstructed.length === 0) return;
13864
+ try {
13865
+ swapReconstructedInstances();
13866
+ } finally {
13867
+ reconstructed.length = 0;
13868
+ }
13869
+ }
13870
+ function swapReconstructedInstances() {
13864
13871
  for (const [instance] of reconstructed) {
13865
13872
  const parent = instance.parent;
13866
13873
  if (parent) {
@@ -13909,14 +13916,114 @@ function swapInstances() {
13909
13916
  invalidateInstance(instance);
13910
13917
  }
13911
13918
  }
13912
- reconstructed.length = 0;
13913
13919
  }
13914
13920
  const handleTextInstance = () => {
13915
13921
  };
13916
13922
  const NO_CONTEXT = {};
13917
13923
  let currentUpdatePriority = NoEventPriority;
13918
- const NoFlags = 0;
13919
- const Update = 4;
13924
+ function getEventPriority(type) {
13925
+ switch (type) {
13926
+ case "beforetoggle":
13927
+ case "cancel":
13928
+ case "click":
13929
+ case "close":
13930
+ case "contextmenu":
13931
+ case "copy":
13932
+ case "cut":
13933
+ case "auxclick":
13934
+ case "dblclick":
13935
+ case "dragend":
13936
+ case "dragstart":
13937
+ case "drop":
13938
+ case "focusin":
13939
+ case "focusout":
13940
+ case "input":
13941
+ case "invalid":
13942
+ case "keydown":
13943
+ case "keypress":
13944
+ case "keyup":
13945
+ case "mousedown":
13946
+ case "mouseup":
13947
+ case "paste":
13948
+ case "pause":
13949
+ case "play":
13950
+ case "pointercancel":
13951
+ case "pointerdown":
13952
+ case "pointerup":
13953
+ case "ratechange":
13954
+ case "reset":
13955
+ case "resize":
13956
+ case "seeked":
13957
+ case "submit":
13958
+ case "touchcancel":
13959
+ case "touchend":
13960
+ case "touchstart":
13961
+ case "volumechange":
13962
+ case "change":
13963
+ case "selectionchange":
13964
+ case "compositionstart":
13965
+ case "compositionend":
13966
+ case "compositionupdate":
13967
+ case "beforeinput":
13968
+ case "blur":
13969
+ case "fullscreenchange":
13970
+ case "focus":
13971
+ case "hashchange":
13972
+ case "popstate":
13973
+ case "select":
13974
+ case "selectstart":
13975
+ return e;
13976
+ case "drag":
13977
+ case "dragenter":
13978
+ case "dragexit":
13979
+ case "dragleave":
13980
+ case "dragover":
13981
+ case "mousemove":
13982
+ case "mouseout":
13983
+ case "mouseover":
13984
+ case "pointermove":
13985
+ case "pointerout":
13986
+ case "pointerover":
13987
+ case "scroll":
13988
+ case "touchmove":
13989
+ case "wheel":
13990
+ case "mouseenter":
13991
+ case "mouseleave":
13992
+ case "pointerenter":
13993
+ case "pointerleave":
13994
+ return o;
13995
+ case "message": {
13996
+ switch (Tb.unstable_getCurrentPriorityLevel()) {
13997
+ case Tb.unstable_ImmediatePriority:
13998
+ return e;
13999
+ case Tb.unstable_UserBlockingPriority:
14000
+ return o;
14001
+ case Tb.unstable_NormalPriority:
14002
+ case Tb.unstable_LowPriority:
14003
+ return r;
14004
+ case Tb.unstable_IdlePriority:
14005
+ return i$1;
14006
+ default:
14007
+ return r;
14008
+ }
14009
+ }
14010
+ default:
14011
+ return r;
14012
+ }
14013
+ }
14014
+ function scheduleMicrotask(callback) {
14015
+ if (typeof queueMicrotask === "function") {
14016
+ queueMicrotask(callback);
14017
+ } else if (typeof Promise !== "undefined") {
14018
+ Promise.resolve().then(callback).catch((error) => {
14019
+ setTimeout(() => {
14020
+ throw error;
14021
+ });
14022
+ });
14023
+ } else {
14024
+ setTimeout(callback);
14025
+ }
14026
+ }
13920
14027
  const reconciler = /* @__PURE__ */ createReconciler({
13921
14028
  isPrimaryRenderer: false,
13922
14029
  warnsIfNotActing: false,
@@ -13955,16 +14062,15 @@ const reconciler = /* @__PURE__ */ createReconciler({
13955
14062
  else if (newProps.args?.length !== oldProps.args?.length) reconstruct = true;
13956
14063
  else if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) reconstruct = true;
13957
14064
  if (reconstruct) {
13958
- reconstructed.push([instance, { ...newProps }, fiber]);
14065
+ reconstructed.push([instance, getInstanceProps(newProps), fiber]);
13959
14066
  } else {
13960
14067
  const changedProps = diffProps(instance, newProps);
13961
- if (Object.keys(changedProps).length) {
13962
- Object.assign(instance.props, changedProps);
13963
- applyProps(instance.object, changedProps);
13964
- }
14068
+ const attach2 = instance.props.attach;
14069
+ instance.props = getInstanceProps(newProps);
14070
+ if (attach2 !== void 0) instance.props.attach = attach2;
14071
+ else delete instance.props.attach;
14072
+ if (Object.keys(changedProps).length) applyProps(instance.object, changedProps);
13965
14073
  }
13966
- const isTailSibling = fiber.sibling === null || (fiber.flags & Update) === NoFlags;
13967
- if (isTailSibling) swapInstances();
13968
14074
  },
13969
14075
  finalizeInitialChildren: (instance) => {
13970
14076
  for (const prop in instance.props) {
@@ -13989,8 +14095,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13989
14095
  const target = container.getState().internal.container ?? container.getState().scene;
13990
14096
  return prepare(target, container, "", {});
13991
14097
  },
13992
- resetAfterCommit: () => {
13993
- },
14098
+ // Reconstructed instances are swapped once all mutations are committed,
14099
+ // before layout effects run so refs point to the new objects
14100
+ resetAfterCommit: flushReconstructedInstances,
13994
14101
  shouldSetTextContent: () => false,
13995
14102
  clearContainer: () => false,
13996
14103
  hideInstance,
@@ -13998,6 +14105,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13998
14105
  createTextInstance: handleTextInstance,
13999
14106
  hideTextInstance: handleTextInstance,
14000
14107
  unhideTextInstance: handleTextInstance,
14108
+ // Mirrors react-dom, which flushes discrete work in microtasks
14109
+ supportsMicrotasks: true,
14110
+ scheduleMicrotask,
14001
14111
  scheduleTimeout: typeof setTimeout === "function" ? setTimeout : void 0,
14002
14112
  cancelTimeout: typeof clearTimeout === "function" ? clearTimeout : void 0,
14003
14113
  noTimeout: -1,
@@ -14038,28 +14148,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
14038
14148
  },
14039
14149
  resolveUpdatePriority() {
14040
14150
  if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority;
14041
- switch (typeof window !== "undefined" && window.event?.type) {
14042
- case "click":
14043
- case "contextmenu":
14044
- case "dblclick":
14045
- case "dragenter":
14046
- case "dragleave":
14047
- case "drop":
14048
- case "pointercancel":
14049
- case "pointerdown":
14050
- case "pointerup":
14051
- return e;
14052
- case "dragover":
14053
- case "pointermove":
14054
- case "pointerout":
14055
- case "pointerover":
14056
- case "pointerenter":
14057
- case "pointerleave":
14058
- case "wheel":
14059
- return o;
14060
- default:
14061
- return r;
14062
- }
14151
+ const eventType = typeof window !== "undefined" ? window.event?.type : void 0;
14152
+ if (eventType === void 0) return r;
14153
+ return getEventPriority(eventType);
14063
14154
  },
14064
14155
  resetFormInstance() {
14065
14156
  },
@@ -14826,14 +14917,36 @@ function parseRendererConfig(rendererProp) {
14826
14917
  return { primaryCanvas: void 0, scheduler: void 0, renderer: rendererProp };
14827
14918
  }
14828
14919
 
14920
+ const RESOURCE_KINDS = ["nodes", "uniforms", "buffers", "gpuStorage"];
14921
+ const registries = /* @__PURE__ */ new WeakMap();
14922
+ function getKindRegistry(store, kind) {
14923
+ let registry = registries.get(store);
14924
+ if (!registry) {
14925
+ registry = {
14926
+ nodes: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14927
+ uniforms: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14928
+ buffers: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14929
+ gpuStorage: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() }
14930
+ };
14931
+ registries.set(store, registry);
14932
+ }
14933
+ return registry[kind];
14934
+ }
14935
+ function invalidateResource(store, kind, scopeKey) {
14936
+ const registry = getKindRegistry(store, kind);
14937
+ {
14938
+ registry.valid.clear();
14939
+ registry.staged.clear();
14940
+ }
14941
+ }
14942
+ function invalidateAllResources(store) {
14943
+ for (const kind of RESOURCE_KINDS) invalidateResource(store, kind);
14944
+ }
14945
+
14829
14946
  function clearHmrCaches(store) {
14830
- store.setState((state) => ({
14831
- nodes: {},
14832
- uniforms: {},
14833
- buffers: {},
14834
- gpuStorage: {},
14835
- _hmrVersion: state._hmrVersion + 1
14836
- }));
14947
+ const primary = store.getState().primaryStore ?? store;
14948
+ invalidateAllResources(primary);
14949
+ primary.setState((state) => ({ _hmrVersion: state._hmrVersion + 1 }));
14837
14950
  }
14838
14951
 
14839
14952
  function CanvasImpl({
@@ -15102,7 +15215,6 @@ exports.REACT_INTERNAL_PROPS = REACT_INTERNAL_PROPS;
15102
15215
  exports.RESERVED_PROPS = RESERVED_PROPS;
15103
15216
  exports.Texture = Texture;
15104
15217
  exports._roots = _roots;
15105
- exports.act = act;
15106
15218
  exports.addAfterEffect = addAfterEffect;
15107
15219
  exports.addEffect = addEffect;
15108
15220
  exports.addTail = addTail;
package/dist/index.d.cts CHANGED
@@ -3246,11 +3246,6 @@ declare function flushSync<R>(fn: () => R): R;
3246
3246
  declare const context: React$1.Context<RootStore>;
3247
3247
  declare const createStore: (invalidate: (state?: RootState, frames?: number, stackFrames?: boolean) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState, frame?: XRFrame) => void) => RootStore;
3248
3248
 
3249
- /**
3250
- * Safely flush async effects when testing, simulating a legacy root.
3251
- * @deprecated Import from React instead. import { act } from 'react'
3252
- */
3253
- declare const act: typeof React$1.act;
3254
3249
  /**
3255
3250
  * An SSR-friendly useLayoutEffect.
3256
3251
  *
@@ -3734,5 +3729,5 @@ declare function isOnce(value: unknown): value is {
3734
3729
  */
3735
3730
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
3736
3731
 
3737
- 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, 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, 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 };
3732
+ 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, Texture, _roots, 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, 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 };
3738
3733
  export type { Act, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DisposeOptions, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameNextCallback, FrameNextState, FrameState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, 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, R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootState, RootStore, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureInput, TextureResult, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/index.d.mts CHANGED
@@ -3246,11 +3246,6 @@ declare function flushSync<R>(fn: () => R): R;
3246
3246
  declare const context: React$1.Context<RootStore>;
3247
3247
  declare const createStore: (invalidate: (state?: RootState, frames?: number, stackFrames?: boolean) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState, frame?: XRFrame) => void) => RootStore;
3248
3248
 
3249
- /**
3250
- * Safely flush async effects when testing, simulating a legacy root.
3251
- * @deprecated Import from React instead. import { act } from 'react'
3252
- */
3253
- declare const act: typeof React$1.act;
3254
3249
  /**
3255
3250
  * An SSR-friendly useLayoutEffect.
3256
3251
  *
@@ -3734,5 +3729,5 @@ declare function isOnce(value: unknown): value is {
3734
3729
  */
3735
3730
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
3736
3731
 
3737
- 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, 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, 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 };
3732
+ 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, Texture, _roots, 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, 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 };
3738
3733
  export type { Act, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DisposeOptions, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameNextCallback, FrameNextState, FrameState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, 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, R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootState, RootStore, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureInput, TextureResult, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/index.d.ts CHANGED
@@ -3246,11 +3246,6 @@ declare function flushSync<R>(fn: () => R): R;
3246
3246
  declare const context: React$1.Context<RootStore>;
3247
3247
  declare const createStore: (invalidate: (state?: RootState, frames?: number, stackFrames?: boolean) => void, advance: (timestamp: number, runGlobalEffects?: boolean, state?: RootState, frame?: XRFrame) => void) => RootStore;
3248
3248
 
3249
- /**
3250
- * Safely flush async effects when testing, simulating a legacy root.
3251
- * @deprecated Import from React instead. import { act } from 'react'
3252
- */
3253
- declare const act: typeof React$1.act;
3254
3249
  /**
3255
3250
  * An SSR-friendly useLayoutEffect.
3256
3251
  *
@@ -3734,5 +3729,5 @@ declare function isOnce(value: unknown): value is {
3734
3729
  */
3735
3730
  declare function Canvas(props: CanvasProps): react_jsx_runtime.JSX.Element;
3736
3731
 
3737
- 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, 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, 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 };
3732
+ 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, Texture, _roots, 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, 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 };
3738
3733
  export type { Act, Args, ArgsProp, AttachFnType, AttachType, BackgroundConfig, BackgroundProp, BaseRendererProps, Bridge, BufferLike, BufferRecord, BufferStore, Camera, CameraProps, CanvasProps, CanvasSchedulerConfig, Catalogue, Color, ColorManagementConfig, ComputeFunction, ConstructorRepresentation, DefaultGLProps, DefaultRendererProps, Disposable, DisposeOptions, DomEvent, Dpr, ElementProps, EnvironmentLoaderProps, EnvironmentProps, EquConfig, Euler, EventHandlers, EventManager, EventProps, Events, Extensions, FiberRoot, FilterFunction, FrameCallback, FrameNextCallback, FrameNextState, FrameState, Frameloop, GLProps, GLTFLike, GeometryProps, GeometryTransformProps, GlobalEffectType, GlobalRenderCallback, HostConfig, InferLoadResult, InjectState, InputLike, Instance, InstanceProps, 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, R3FRenderer, RaycastableRepresentation, ReactProps, ReconcilerRoot, RenderCallback, RenderProps, RenderTargetOptions, Renderer, RendererConfigExtended, RendererFactory, RendererProps, Root, RootState, RootStore, SetBlock, Size, StorageLike, StorageRecord, StorageStore, Subscription, TSLNodeInput, TextureInput, TextureResult, ThreeCamera, ThreeElement, ThreeElements, ThreeElementsImpl, ThreeEvent, ThreeExports, ThreeToJSXElements, UnblockProps, UseTextureOptions, UseTexturesReturn, Vector2, Vector3, Vector4, VectorRepresentation, Viewport, VisibilityEntry, WebGLDefaultProps, WebGLProps, WebGLShadowConfig, XRManager, XRPointerConfig };
package/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ import { HDRLoader } from 'three/examples/jsm/loaders/HDRLoader.js';
13
13
  import { EXRLoader } from 'three/examples/jsm/loaders/EXRLoader.js';
14
14
  import { UltraHDRLoader } from 'three/examples/jsm/loaders/UltraHDRLoader.js';
15
15
  import { GainMapLoader } from '@monogrid/gainmap-js';
16
- import Tb, { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';
16
+ import Tb, { unstable_getCurrentPriorityLevel, unstable_IdlePriority, unstable_LowPriority, unstable_NormalPriority, unstable_UserBlockingPriority, unstable_ImmediatePriority, unstable_scheduleCallback } from 'scheduler';
17
17
  import { createWithEqualityFn } from 'zustand/traditional';
18
18
  import { getScheduler } from '@pmndrs/scheduler';
19
19
  export { Scheduler, getScheduler } from '@pmndrs/scheduler';
@@ -434,7 +434,6 @@ function Environment(props) {
434
434
  var __defProp = Object.defineProperty;
435
435
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
436
436
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
437
- const act = React["act"];
438
437
  const useIsomorphicLayoutEffect = /* @__PURE__ */ (() => typeof window !== "undefined" && (window.document?.createElement || window.navigator?.product === "ReactNative"))() ? React.useLayoutEffect : React.useEffect;
439
438
  function useMutableCallback(fn) {
440
439
  const ref = React.useRef(fn);
@@ -938,9 +937,9 @@ function diffProps(instance, newProps) {
938
937
  const { root, key } = resolve(instance.object, prop);
939
938
  if (root.constructor && root.constructor.length === 0) {
940
939
  const ctor = getMemoizedPrototype(root);
941
- if (!is.und(ctor)) changedProps[key] = ctor[key];
940
+ if (!is.und(ctor)) changedProps[prop] = ctor[key];
942
941
  } else {
943
- changedProps[key] = 0;
942
+ changedProps[prop] = 0;
944
943
  }
945
944
  }
946
945
  return changedProps;
@@ -13675,7 +13674,7 @@ function n0() {
13675
13674
  var t0 = n0();
13676
13675
  const r0 = Xb(t0);
13677
13676
 
13678
- const t = 1, o = 8, r = 32, e = 2;
13677
+ const t = 1, o = 8, r = 32, e = 2, i$1 = 268435456;
13679
13678
 
13680
13679
  function createReconciler(config) {
13681
13680
  const reconciler2 = r0(config);
@@ -13840,7 +13839,15 @@ function setFiberRef(fiber, publicInstance) {
13840
13839
  }
13841
13840
  }
13842
13841
  const reconstructed = [];
13843
- function swapInstances() {
13842
+ function flushReconstructedInstances() {
13843
+ if (reconstructed.length === 0) return;
13844
+ try {
13845
+ swapReconstructedInstances();
13846
+ } finally {
13847
+ reconstructed.length = 0;
13848
+ }
13849
+ }
13850
+ function swapReconstructedInstances() {
13844
13851
  for (const [instance] of reconstructed) {
13845
13852
  const parent = instance.parent;
13846
13853
  if (parent) {
@@ -13889,14 +13896,114 @@ function swapInstances() {
13889
13896
  invalidateInstance(instance);
13890
13897
  }
13891
13898
  }
13892
- reconstructed.length = 0;
13893
13899
  }
13894
13900
  const handleTextInstance = () => {
13895
13901
  };
13896
13902
  const NO_CONTEXT = {};
13897
13903
  let currentUpdatePriority = NoEventPriority;
13898
- const NoFlags = 0;
13899
- const Update = 4;
13904
+ function getEventPriority(type) {
13905
+ switch (type) {
13906
+ case "beforetoggle":
13907
+ case "cancel":
13908
+ case "click":
13909
+ case "close":
13910
+ case "contextmenu":
13911
+ case "copy":
13912
+ case "cut":
13913
+ case "auxclick":
13914
+ case "dblclick":
13915
+ case "dragend":
13916
+ case "dragstart":
13917
+ case "drop":
13918
+ case "focusin":
13919
+ case "focusout":
13920
+ case "input":
13921
+ case "invalid":
13922
+ case "keydown":
13923
+ case "keypress":
13924
+ case "keyup":
13925
+ case "mousedown":
13926
+ case "mouseup":
13927
+ case "paste":
13928
+ case "pause":
13929
+ case "play":
13930
+ case "pointercancel":
13931
+ case "pointerdown":
13932
+ case "pointerup":
13933
+ case "ratechange":
13934
+ case "reset":
13935
+ case "resize":
13936
+ case "seeked":
13937
+ case "submit":
13938
+ case "touchcancel":
13939
+ case "touchend":
13940
+ case "touchstart":
13941
+ case "volumechange":
13942
+ case "change":
13943
+ case "selectionchange":
13944
+ case "compositionstart":
13945
+ case "compositionend":
13946
+ case "compositionupdate":
13947
+ case "beforeinput":
13948
+ case "blur":
13949
+ case "fullscreenchange":
13950
+ case "focus":
13951
+ case "hashchange":
13952
+ case "popstate":
13953
+ case "select":
13954
+ case "selectstart":
13955
+ return e;
13956
+ case "drag":
13957
+ case "dragenter":
13958
+ case "dragexit":
13959
+ case "dragleave":
13960
+ case "dragover":
13961
+ case "mousemove":
13962
+ case "mouseout":
13963
+ case "mouseover":
13964
+ case "pointermove":
13965
+ case "pointerout":
13966
+ case "pointerover":
13967
+ case "scroll":
13968
+ case "touchmove":
13969
+ case "wheel":
13970
+ case "mouseenter":
13971
+ case "mouseleave":
13972
+ case "pointerenter":
13973
+ case "pointerleave":
13974
+ return o;
13975
+ case "message": {
13976
+ switch (unstable_getCurrentPriorityLevel()) {
13977
+ case unstable_ImmediatePriority:
13978
+ return e;
13979
+ case unstable_UserBlockingPriority:
13980
+ return o;
13981
+ case unstable_NormalPriority:
13982
+ case unstable_LowPriority:
13983
+ return r;
13984
+ case unstable_IdlePriority:
13985
+ return i$1;
13986
+ default:
13987
+ return r;
13988
+ }
13989
+ }
13990
+ default:
13991
+ return r;
13992
+ }
13993
+ }
13994
+ function scheduleMicrotask(callback) {
13995
+ if (typeof queueMicrotask === "function") {
13996
+ queueMicrotask(callback);
13997
+ } else if (typeof Promise !== "undefined") {
13998
+ Promise.resolve().then(callback).catch((error) => {
13999
+ setTimeout(() => {
14000
+ throw error;
14001
+ });
14002
+ });
14003
+ } else {
14004
+ setTimeout(callback);
14005
+ }
14006
+ }
13900
14007
  const reconciler = /* @__PURE__ */ createReconciler({
13901
14008
  isPrimaryRenderer: false,
13902
14009
  warnsIfNotActing: false,
@@ -13935,16 +14042,15 @@ const reconciler = /* @__PURE__ */ createReconciler({
13935
14042
  else if (newProps.args?.length !== oldProps.args?.length) reconstruct = true;
13936
14043
  else if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) reconstruct = true;
13937
14044
  if (reconstruct) {
13938
- reconstructed.push([instance, { ...newProps }, fiber]);
14045
+ reconstructed.push([instance, getInstanceProps(newProps), fiber]);
13939
14046
  } else {
13940
14047
  const changedProps = diffProps(instance, newProps);
13941
- if (Object.keys(changedProps).length) {
13942
- Object.assign(instance.props, changedProps);
13943
- applyProps(instance.object, changedProps);
13944
- }
14048
+ const attach2 = instance.props.attach;
14049
+ instance.props = getInstanceProps(newProps);
14050
+ if (attach2 !== void 0) instance.props.attach = attach2;
14051
+ else delete instance.props.attach;
14052
+ if (Object.keys(changedProps).length) applyProps(instance.object, changedProps);
13945
14053
  }
13946
- const isTailSibling = fiber.sibling === null || (fiber.flags & Update) === NoFlags;
13947
- if (isTailSibling) swapInstances();
13948
14054
  },
13949
14055
  finalizeInitialChildren: (instance) => {
13950
14056
  for (const prop in instance.props) {
@@ -13969,8 +14075,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13969
14075
  const target = container.getState().internal.container ?? container.getState().scene;
13970
14076
  return prepare(target, container, "", {});
13971
14077
  },
13972
- resetAfterCommit: () => {
13973
- },
14078
+ // Reconstructed instances are swapped once all mutations are committed,
14079
+ // before layout effects run so refs point to the new objects
14080
+ resetAfterCommit: flushReconstructedInstances,
13974
14081
  shouldSetTextContent: () => false,
13975
14082
  clearContainer: () => false,
13976
14083
  hideInstance,
@@ -13978,6 +14085,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13978
14085
  createTextInstance: handleTextInstance,
13979
14086
  hideTextInstance: handleTextInstance,
13980
14087
  unhideTextInstance: handleTextInstance,
14088
+ // Mirrors react-dom, which flushes discrete work in microtasks
14089
+ supportsMicrotasks: true,
14090
+ scheduleMicrotask,
13981
14091
  scheduleTimeout: typeof setTimeout === "function" ? setTimeout : void 0,
13982
14092
  cancelTimeout: typeof clearTimeout === "function" ? clearTimeout : void 0,
13983
14093
  noTimeout: -1,
@@ -14018,28 +14128,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
14018
14128
  },
14019
14129
  resolveUpdatePriority() {
14020
14130
  if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority;
14021
- switch (typeof window !== "undefined" && window.event?.type) {
14022
- case "click":
14023
- case "contextmenu":
14024
- case "dblclick":
14025
- case "dragenter":
14026
- case "dragleave":
14027
- case "drop":
14028
- case "pointercancel":
14029
- case "pointerdown":
14030
- case "pointerup":
14031
- return e;
14032
- case "dragover":
14033
- case "pointermove":
14034
- case "pointerout":
14035
- case "pointerover":
14036
- case "pointerenter":
14037
- case "pointerleave":
14038
- case "wheel":
14039
- return o;
14040
- default:
14041
- return r;
14042
- }
14131
+ const eventType = typeof window !== "undefined" ? window.event?.type : void 0;
14132
+ if (eventType === void 0) return r;
14133
+ return getEventPriority(eventType);
14043
14134
  },
14044
14135
  resetFormInstance() {
14045
14136
  },
@@ -14806,14 +14897,36 @@ function parseRendererConfig(rendererProp) {
14806
14897
  return { primaryCanvas: void 0, scheduler: void 0, renderer: rendererProp };
14807
14898
  }
14808
14899
 
14900
+ const RESOURCE_KINDS = ["nodes", "uniforms", "buffers", "gpuStorage"];
14901
+ const registries = /* @__PURE__ */ new WeakMap();
14902
+ function getKindRegistry(store, kind) {
14903
+ let registry = registries.get(store);
14904
+ if (!registry) {
14905
+ registry = {
14906
+ nodes: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14907
+ uniforms: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14908
+ buffers: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14909
+ gpuStorage: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() }
14910
+ };
14911
+ registries.set(store, registry);
14912
+ }
14913
+ return registry[kind];
14914
+ }
14915
+ function invalidateResource(store, kind, scopeKey) {
14916
+ const registry = getKindRegistry(store, kind);
14917
+ {
14918
+ registry.valid.clear();
14919
+ registry.staged.clear();
14920
+ }
14921
+ }
14922
+ function invalidateAllResources(store) {
14923
+ for (const kind of RESOURCE_KINDS) invalidateResource(store, kind);
14924
+ }
14925
+
14809
14926
  function clearHmrCaches(store) {
14810
- store.setState((state) => ({
14811
- nodes: {},
14812
- uniforms: {},
14813
- buffers: {},
14814
- gpuStorage: {},
14815
- _hmrVersion: state._hmrVersion + 1
14816
- }));
14927
+ const primary = store.getState().primaryStore ?? store;
14928
+ invalidateAllResources(primary);
14929
+ primary.setState((state) => ({ _hmrVersion: state._hmrVersion + 1 }));
14817
14930
  }
14818
14931
 
14819
14932
  function CanvasImpl({
@@ -15063,4 +15176,4 @@ function Canvas(props) {
15063
15176
 
15064
15177
  extend(THREE);
15065
15178
 
15066
- 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, 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, 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 };
15179
+ 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, context, createEvents, createPointerEvents, createPortal, createRoot, createStore, 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, 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 };