@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/legacy.cjs CHANGED
@@ -463,7 +463,6 @@ function Environment(props) {
463
463
  var __defProp = Object.defineProperty;
464
464
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
465
465
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
466
- const act = React__namespace["act"];
467
466
  const useIsomorphicLayoutEffect = /* @__PURE__ */ (() => typeof window !== "undefined" && (window.document?.createElement || window.navigator?.product === "ReactNative"))() ? React__namespace.useLayoutEffect : React__namespace.useEffect;
468
467
  function useMutableCallback(fn) {
469
468
  const ref = React__namespace.useRef(fn);
@@ -967,9 +966,9 @@ function diffProps(instance, newProps) {
967
966
  const { root, key } = resolve(instance.object, prop);
968
967
  if (root.constructor && root.constructor.length === 0) {
969
968
  const ctor = getMemoizedPrototype(root);
970
- if (!is.und(ctor)) changedProps[key] = ctor[key];
969
+ if (!is.und(ctor)) changedProps[prop] = ctor[key];
971
970
  } else {
972
- changedProps[key] = 0;
971
+ changedProps[prop] = 0;
973
972
  }
974
973
  }
975
974
  return changedProps;
@@ -13702,7 +13701,7 @@ function n0() {
13702
13701
  var t0 = n0();
13703
13702
  const r0 = Xb(t0);
13704
13703
 
13705
- const t = 1, o = 8, r = 32, e = 2;
13704
+ const t = 1, o = 8, r = 32, e = 2, i$1 = 268435456;
13706
13705
 
13707
13706
  function createReconciler(config) {
13708
13707
  const reconciler2 = r0(config);
@@ -13867,7 +13866,15 @@ function setFiberRef(fiber, publicInstance) {
13867
13866
  }
13868
13867
  }
13869
13868
  const reconstructed = [];
13870
- function swapInstances() {
13869
+ function flushReconstructedInstances() {
13870
+ if (reconstructed.length === 0) return;
13871
+ try {
13872
+ swapReconstructedInstances();
13873
+ } finally {
13874
+ reconstructed.length = 0;
13875
+ }
13876
+ }
13877
+ function swapReconstructedInstances() {
13871
13878
  for (const [instance] of reconstructed) {
13872
13879
  const parent = instance.parent;
13873
13880
  if (parent) {
@@ -13916,14 +13923,114 @@ function swapInstances() {
13916
13923
  invalidateInstance(instance);
13917
13924
  }
13918
13925
  }
13919
- reconstructed.length = 0;
13920
13926
  }
13921
13927
  const handleTextInstance = () => {
13922
13928
  };
13923
13929
  const NO_CONTEXT = {};
13924
13930
  let currentUpdatePriority = NoEventPriority;
13925
- const NoFlags = 0;
13926
- const Update = 4;
13931
+ function getEventPriority(type) {
13932
+ switch (type) {
13933
+ case "beforetoggle":
13934
+ case "cancel":
13935
+ case "click":
13936
+ case "close":
13937
+ case "contextmenu":
13938
+ case "copy":
13939
+ case "cut":
13940
+ case "auxclick":
13941
+ case "dblclick":
13942
+ case "dragend":
13943
+ case "dragstart":
13944
+ case "drop":
13945
+ case "focusin":
13946
+ case "focusout":
13947
+ case "input":
13948
+ case "invalid":
13949
+ case "keydown":
13950
+ case "keypress":
13951
+ case "keyup":
13952
+ case "mousedown":
13953
+ case "mouseup":
13954
+ case "paste":
13955
+ case "pause":
13956
+ case "play":
13957
+ case "pointercancel":
13958
+ case "pointerdown":
13959
+ case "pointerup":
13960
+ case "ratechange":
13961
+ case "reset":
13962
+ case "resize":
13963
+ case "seeked":
13964
+ case "submit":
13965
+ case "touchcancel":
13966
+ case "touchend":
13967
+ case "touchstart":
13968
+ case "volumechange":
13969
+ case "change":
13970
+ case "selectionchange":
13971
+ case "compositionstart":
13972
+ case "compositionend":
13973
+ case "compositionupdate":
13974
+ case "beforeinput":
13975
+ case "blur":
13976
+ case "fullscreenchange":
13977
+ case "focus":
13978
+ case "hashchange":
13979
+ case "popstate":
13980
+ case "select":
13981
+ case "selectstart":
13982
+ return e;
13983
+ case "drag":
13984
+ case "dragenter":
13985
+ case "dragexit":
13986
+ case "dragleave":
13987
+ case "dragover":
13988
+ case "mousemove":
13989
+ case "mouseout":
13990
+ case "mouseover":
13991
+ case "pointermove":
13992
+ case "pointerout":
13993
+ case "pointerover":
13994
+ case "scroll":
13995
+ case "touchmove":
13996
+ case "wheel":
13997
+ case "mouseenter":
13998
+ case "mouseleave":
13999
+ case "pointerenter":
14000
+ case "pointerleave":
14001
+ return o;
14002
+ case "message": {
14003
+ switch (Tb.unstable_getCurrentPriorityLevel()) {
14004
+ case Tb.unstable_ImmediatePriority:
14005
+ return e;
14006
+ case Tb.unstable_UserBlockingPriority:
14007
+ return o;
14008
+ case Tb.unstable_NormalPriority:
14009
+ case Tb.unstable_LowPriority:
14010
+ return r;
14011
+ case Tb.unstable_IdlePriority:
14012
+ return i$1;
14013
+ default:
14014
+ return r;
14015
+ }
14016
+ }
14017
+ default:
14018
+ return r;
14019
+ }
14020
+ }
14021
+ function scheduleMicrotask(callback) {
14022
+ if (typeof queueMicrotask === "function") {
14023
+ queueMicrotask(callback);
14024
+ } else if (typeof Promise !== "undefined") {
14025
+ Promise.resolve().then(callback).catch((error) => {
14026
+ setTimeout(() => {
14027
+ throw error;
14028
+ });
14029
+ });
14030
+ } else {
14031
+ setTimeout(callback);
14032
+ }
14033
+ }
13927
14034
  const reconciler = /* @__PURE__ */ createReconciler({
13928
14035
  isPrimaryRenderer: false,
13929
14036
  warnsIfNotActing: false,
@@ -13962,16 +14069,15 @@ const reconciler = /* @__PURE__ */ createReconciler({
13962
14069
  else if (newProps.args?.length !== oldProps.args?.length) reconstruct = true;
13963
14070
  else if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) reconstruct = true;
13964
14071
  if (reconstruct) {
13965
- reconstructed.push([instance, { ...newProps }, fiber]);
14072
+ reconstructed.push([instance, getInstanceProps(newProps), fiber]);
13966
14073
  } else {
13967
14074
  const changedProps = diffProps(instance, newProps);
13968
- if (Object.keys(changedProps).length) {
13969
- Object.assign(instance.props, changedProps);
13970
- applyProps(instance.object, changedProps);
13971
- }
14075
+ const attach2 = instance.props.attach;
14076
+ instance.props = getInstanceProps(newProps);
14077
+ if (attach2 !== void 0) instance.props.attach = attach2;
14078
+ else delete instance.props.attach;
14079
+ if (Object.keys(changedProps).length) applyProps(instance.object, changedProps);
13972
14080
  }
13973
- const isTailSibling = fiber.sibling === null || (fiber.flags & Update) === NoFlags;
13974
- if (isTailSibling) swapInstances();
13975
14081
  },
13976
14082
  finalizeInitialChildren: (instance) => {
13977
14083
  for (const prop in instance.props) {
@@ -13996,8 +14102,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13996
14102
  const target = container.getState().internal.container ?? container.getState().scene;
13997
14103
  return prepare(target, container, "", {});
13998
14104
  },
13999
- resetAfterCommit: () => {
14000
- },
14105
+ // Reconstructed instances are swapped once all mutations are committed,
14106
+ // before layout effects run so refs point to the new objects
14107
+ resetAfterCommit: flushReconstructedInstances,
14001
14108
  shouldSetTextContent: () => false,
14002
14109
  clearContainer: () => false,
14003
14110
  hideInstance,
@@ -14005,6 +14112,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
14005
14112
  createTextInstance: handleTextInstance,
14006
14113
  hideTextInstance: handleTextInstance,
14007
14114
  unhideTextInstance: handleTextInstance,
14115
+ // Mirrors react-dom, which flushes discrete work in microtasks
14116
+ supportsMicrotasks: true,
14117
+ scheduleMicrotask,
14008
14118
  scheduleTimeout: typeof setTimeout === "function" ? setTimeout : void 0,
14009
14119
  cancelTimeout: typeof clearTimeout === "function" ? clearTimeout : void 0,
14010
14120
  noTimeout: -1,
@@ -14045,28 +14155,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
14045
14155
  },
14046
14156
  resolveUpdatePriority() {
14047
14157
  if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority;
14048
- switch (typeof window !== "undefined" && window.event?.type) {
14049
- case "click":
14050
- case "contextmenu":
14051
- case "dblclick":
14052
- case "dragenter":
14053
- case "dragleave":
14054
- case "drop":
14055
- case "pointercancel":
14056
- case "pointerdown":
14057
- case "pointerup":
14058
- return e;
14059
- case "dragover":
14060
- case "pointermove":
14061
- case "pointerout":
14062
- case "pointerover":
14063
- case "pointerenter":
14064
- case "pointerleave":
14065
- case "wheel":
14066
- return o;
14067
- default:
14068
- return r;
14069
- }
14158
+ const eventType = typeof window !== "undefined" ? window.event?.type : void 0;
14159
+ if (eventType === void 0) return r;
14160
+ return getEventPriority(eventType);
14070
14161
  },
14071
14162
  resetFormInstance() {
14072
14163
  },
@@ -14786,14 +14877,36 @@ function parseRendererConfig(rendererProp) {
14786
14877
  return { primaryCanvas: void 0, scheduler: void 0, renderer: rendererProp };
14787
14878
  }
14788
14879
 
14880
+ const RESOURCE_KINDS = ["nodes", "uniforms", "buffers", "gpuStorage"];
14881
+ const registries = /* @__PURE__ */ new WeakMap();
14882
+ function getKindRegistry(store, kind) {
14883
+ let registry = registries.get(store);
14884
+ if (!registry) {
14885
+ registry = {
14886
+ nodes: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14887
+ uniforms: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14888
+ buffers: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14889
+ gpuStorage: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() }
14890
+ };
14891
+ registries.set(store, registry);
14892
+ }
14893
+ return registry[kind];
14894
+ }
14895
+ function invalidateResource(store, kind, scopeKey) {
14896
+ const registry = getKindRegistry(store, kind);
14897
+ {
14898
+ registry.valid.clear();
14899
+ registry.staged.clear();
14900
+ }
14901
+ }
14902
+ function invalidateAllResources(store) {
14903
+ for (const kind of RESOURCE_KINDS) invalidateResource(store, kind);
14904
+ }
14905
+
14789
14906
  function clearHmrCaches(store) {
14790
- store.setState((state) => ({
14791
- nodes: {},
14792
- uniforms: {},
14793
- buffers: {},
14794
- gpuStorage: {},
14795
- _hmrVersion: state._hmrVersion + 1
14796
- }));
14907
+ const primary = store.getState().primaryStore ?? store;
14908
+ invalidateAllResources(primary);
14909
+ primary.setState((state) => ({ _hmrVersion: state._hmrVersion + 1 }));
14797
14910
  }
14798
14911
 
14799
14912
  function CanvasImpl({
@@ -15062,7 +15175,6 @@ exports.REACT_INTERNAL_PROPS = REACT_INTERNAL_PROPS;
15062
15175
  exports.RESERVED_PROPS = RESERVED_PROPS;
15063
15176
  exports.Texture = Texture;
15064
15177
  exports._roots = _roots;
15065
- exports.act = act;
15066
15178
  exports.addAfterEffect = addAfterEffect;
15067
15179
  exports.addEffect = addEffect;
15068
15180
  exports.addTail = addTail;
package/dist/legacy.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, 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, LegacyRootState as 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/legacy.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, 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, LegacyRootState as 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/legacy.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, 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, LegacyRootState as 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/legacy.mjs CHANGED
@@ -11,7 +11,7 @@ import { HDRLoader } from 'three/examples/jsm/loaders/HDRLoader.js';
11
11
  import { EXRLoader } from 'three/examples/jsm/loaders/EXRLoader.js';
12
12
  import { UltraHDRLoader } from 'three/examples/jsm/loaders/UltraHDRLoader.js';
13
13
  import { GainMapLoader } from '@monogrid/gainmap-js';
14
- import Tb, { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';
14
+ import Tb, { unstable_getCurrentPriorityLevel, unstable_IdlePriority, unstable_LowPriority, unstable_NormalPriority, unstable_UserBlockingPriority, unstable_ImmediatePriority, unstable_scheduleCallback } from 'scheduler';
15
15
  import { createWithEqualityFn } from 'zustand/traditional';
16
16
  import { getScheduler } from '@pmndrs/scheduler';
17
17
  export { Scheduler, getScheduler } from '@pmndrs/scheduler';
@@ -443,7 +443,6 @@ function Environment(props) {
443
443
  var __defProp = Object.defineProperty;
444
444
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
445
445
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
446
- const act = React["act"];
447
446
  const useIsomorphicLayoutEffect = /* @__PURE__ */ (() => typeof window !== "undefined" && (window.document?.createElement || window.navigator?.product === "ReactNative"))() ? React.useLayoutEffect : React.useEffect;
448
447
  function useMutableCallback(fn) {
449
448
  const ref = React.useRef(fn);
@@ -947,9 +946,9 @@ function diffProps(instance, newProps) {
947
946
  const { root, key } = resolve(instance.object, prop);
948
947
  if (root.constructor && root.constructor.length === 0) {
949
948
  const ctor = getMemoizedPrototype(root);
950
- if (!is.und(ctor)) changedProps[key] = ctor[key];
949
+ if (!is.und(ctor)) changedProps[prop] = ctor[key];
951
950
  } else {
952
- changedProps[key] = 0;
951
+ changedProps[prop] = 0;
953
952
  }
954
953
  }
955
954
  return changedProps;
@@ -13682,7 +13681,7 @@ function n0() {
13682
13681
  var t0 = n0();
13683
13682
  const r0 = Xb(t0);
13684
13683
 
13685
- const t = 1, o = 8, r = 32, e = 2;
13684
+ const t = 1, o = 8, r = 32, e = 2, i$1 = 268435456;
13686
13685
 
13687
13686
  function createReconciler(config) {
13688
13687
  const reconciler2 = r0(config);
@@ -13847,7 +13846,15 @@ function setFiberRef(fiber, publicInstance) {
13847
13846
  }
13848
13847
  }
13849
13848
  const reconstructed = [];
13850
- function swapInstances() {
13849
+ function flushReconstructedInstances() {
13850
+ if (reconstructed.length === 0) return;
13851
+ try {
13852
+ swapReconstructedInstances();
13853
+ } finally {
13854
+ reconstructed.length = 0;
13855
+ }
13856
+ }
13857
+ function swapReconstructedInstances() {
13851
13858
  for (const [instance] of reconstructed) {
13852
13859
  const parent = instance.parent;
13853
13860
  if (parent) {
@@ -13896,14 +13903,114 @@ function swapInstances() {
13896
13903
  invalidateInstance(instance);
13897
13904
  }
13898
13905
  }
13899
- reconstructed.length = 0;
13900
13906
  }
13901
13907
  const handleTextInstance = () => {
13902
13908
  };
13903
13909
  const NO_CONTEXT = {};
13904
13910
  let currentUpdatePriority = NoEventPriority;
13905
- const NoFlags = 0;
13906
- const Update = 4;
13911
+ function getEventPriority(type) {
13912
+ switch (type) {
13913
+ case "beforetoggle":
13914
+ case "cancel":
13915
+ case "click":
13916
+ case "close":
13917
+ case "contextmenu":
13918
+ case "copy":
13919
+ case "cut":
13920
+ case "auxclick":
13921
+ case "dblclick":
13922
+ case "dragend":
13923
+ case "dragstart":
13924
+ case "drop":
13925
+ case "focusin":
13926
+ case "focusout":
13927
+ case "input":
13928
+ case "invalid":
13929
+ case "keydown":
13930
+ case "keypress":
13931
+ case "keyup":
13932
+ case "mousedown":
13933
+ case "mouseup":
13934
+ case "paste":
13935
+ case "pause":
13936
+ case "play":
13937
+ case "pointercancel":
13938
+ case "pointerdown":
13939
+ case "pointerup":
13940
+ case "ratechange":
13941
+ case "reset":
13942
+ case "resize":
13943
+ case "seeked":
13944
+ case "submit":
13945
+ case "touchcancel":
13946
+ case "touchend":
13947
+ case "touchstart":
13948
+ case "volumechange":
13949
+ case "change":
13950
+ case "selectionchange":
13951
+ case "compositionstart":
13952
+ case "compositionend":
13953
+ case "compositionupdate":
13954
+ case "beforeinput":
13955
+ case "blur":
13956
+ case "fullscreenchange":
13957
+ case "focus":
13958
+ case "hashchange":
13959
+ case "popstate":
13960
+ case "select":
13961
+ case "selectstart":
13962
+ return e;
13963
+ case "drag":
13964
+ case "dragenter":
13965
+ case "dragexit":
13966
+ case "dragleave":
13967
+ case "dragover":
13968
+ case "mousemove":
13969
+ case "mouseout":
13970
+ case "mouseover":
13971
+ case "pointermove":
13972
+ case "pointerout":
13973
+ case "pointerover":
13974
+ case "scroll":
13975
+ case "touchmove":
13976
+ case "wheel":
13977
+ case "mouseenter":
13978
+ case "mouseleave":
13979
+ case "pointerenter":
13980
+ case "pointerleave":
13981
+ return o;
13982
+ case "message": {
13983
+ switch (unstable_getCurrentPriorityLevel()) {
13984
+ case unstable_ImmediatePriority:
13985
+ return e;
13986
+ case unstable_UserBlockingPriority:
13987
+ return o;
13988
+ case unstable_NormalPriority:
13989
+ case unstable_LowPriority:
13990
+ return r;
13991
+ case unstable_IdlePriority:
13992
+ return i$1;
13993
+ default:
13994
+ return r;
13995
+ }
13996
+ }
13997
+ default:
13998
+ return r;
13999
+ }
14000
+ }
14001
+ function scheduleMicrotask(callback) {
14002
+ if (typeof queueMicrotask === "function") {
14003
+ queueMicrotask(callback);
14004
+ } else if (typeof Promise !== "undefined") {
14005
+ Promise.resolve().then(callback).catch((error) => {
14006
+ setTimeout(() => {
14007
+ throw error;
14008
+ });
14009
+ });
14010
+ } else {
14011
+ setTimeout(callback);
14012
+ }
14013
+ }
13907
14014
  const reconciler = /* @__PURE__ */ createReconciler({
13908
14015
  isPrimaryRenderer: false,
13909
14016
  warnsIfNotActing: false,
@@ -13942,16 +14049,15 @@ const reconciler = /* @__PURE__ */ createReconciler({
13942
14049
  else if (newProps.args?.length !== oldProps.args?.length) reconstruct = true;
13943
14050
  else if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) reconstruct = true;
13944
14051
  if (reconstruct) {
13945
- reconstructed.push([instance, { ...newProps }, fiber]);
14052
+ reconstructed.push([instance, getInstanceProps(newProps), fiber]);
13946
14053
  } else {
13947
14054
  const changedProps = diffProps(instance, newProps);
13948
- if (Object.keys(changedProps).length) {
13949
- Object.assign(instance.props, changedProps);
13950
- applyProps(instance.object, changedProps);
13951
- }
14055
+ const attach2 = instance.props.attach;
14056
+ instance.props = getInstanceProps(newProps);
14057
+ if (attach2 !== void 0) instance.props.attach = attach2;
14058
+ else delete instance.props.attach;
14059
+ if (Object.keys(changedProps).length) applyProps(instance.object, changedProps);
13952
14060
  }
13953
- const isTailSibling = fiber.sibling === null || (fiber.flags & Update) === NoFlags;
13954
- if (isTailSibling) swapInstances();
13955
14061
  },
13956
14062
  finalizeInitialChildren: (instance) => {
13957
14063
  for (const prop in instance.props) {
@@ -13976,8 +14082,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13976
14082
  const target = container.getState().internal.container ?? container.getState().scene;
13977
14083
  return prepare(target, container, "", {});
13978
14084
  },
13979
- resetAfterCommit: () => {
13980
- },
14085
+ // Reconstructed instances are swapped once all mutations are committed,
14086
+ // before layout effects run so refs point to the new objects
14087
+ resetAfterCommit: flushReconstructedInstances,
13981
14088
  shouldSetTextContent: () => false,
13982
14089
  clearContainer: () => false,
13983
14090
  hideInstance,
@@ -13985,6 +14092,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
13985
14092
  createTextInstance: handleTextInstance,
13986
14093
  hideTextInstance: handleTextInstance,
13987
14094
  unhideTextInstance: handleTextInstance,
14095
+ // Mirrors react-dom, which flushes discrete work in microtasks
14096
+ supportsMicrotasks: true,
14097
+ scheduleMicrotask,
13988
14098
  scheduleTimeout: typeof setTimeout === "function" ? setTimeout : void 0,
13989
14099
  cancelTimeout: typeof clearTimeout === "function" ? clearTimeout : void 0,
13990
14100
  noTimeout: -1,
@@ -14025,28 +14135,9 @@ const reconciler = /* @__PURE__ */ createReconciler({
14025
14135
  },
14026
14136
  resolveUpdatePriority() {
14027
14137
  if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority;
14028
- switch (typeof window !== "undefined" && window.event?.type) {
14029
- case "click":
14030
- case "contextmenu":
14031
- case "dblclick":
14032
- case "dragenter":
14033
- case "dragleave":
14034
- case "drop":
14035
- case "pointercancel":
14036
- case "pointerdown":
14037
- case "pointerup":
14038
- return e;
14039
- case "dragover":
14040
- case "pointermove":
14041
- case "pointerout":
14042
- case "pointerover":
14043
- case "pointerenter":
14044
- case "pointerleave":
14045
- case "wheel":
14046
- return o;
14047
- default:
14048
- return r;
14049
- }
14138
+ const eventType = typeof window !== "undefined" ? window.event?.type : void 0;
14139
+ if (eventType === void 0) return r;
14140
+ return getEventPriority(eventType);
14050
14141
  },
14051
14142
  resetFormInstance() {
14052
14143
  },
@@ -14766,14 +14857,36 @@ function parseRendererConfig(rendererProp) {
14766
14857
  return { primaryCanvas: void 0, scheduler: void 0, renderer: rendererProp };
14767
14858
  }
14768
14859
 
14860
+ const RESOURCE_KINDS = ["nodes", "uniforms", "buffers", "gpuStorage"];
14861
+ const registries = /* @__PURE__ */ new WeakMap();
14862
+ function getKindRegistry(store, kind) {
14863
+ let registry = registries.get(store);
14864
+ if (!registry) {
14865
+ registry = {
14866
+ nodes: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14867
+ uniforms: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14868
+ buffers: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() },
14869
+ gpuStorage: { valid: /* @__PURE__ */ new Set(), staged: /* @__PURE__ */ new Map() }
14870
+ };
14871
+ registries.set(store, registry);
14872
+ }
14873
+ return registry[kind];
14874
+ }
14875
+ function invalidateResource(store, kind, scopeKey) {
14876
+ const registry = getKindRegistry(store, kind);
14877
+ {
14878
+ registry.valid.clear();
14879
+ registry.staged.clear();
14880
+ }
14881
+ }
14882
+ function invalidateAllResources(store) {
14883
+ for (const kind of RESOURCE_KINDS) invalidateResource(store, kind);
14884
+ }
14885
+
14769
14886
  function clearHmrCaches(store) {
14770
- store.setState((state) => ({
14771
- nodes: {},
14772
- uniforms: {},
14773
- buffers: {},
14774
- gpuStorage: {},
14775
- _hmrVersion: state._hmrVersion + 1
14776
- }));
14887
+ const primary = store.getState().primaryStore ?? store;
14888
+ invalidateAllResources(primary);
14889
+ primary.setState((state) => ({ _hmrVersion: state._hmrVersion + 1 }));
14777
14890
  }
14778
14891
 
14779
14892
  function CanvasImpl({
@@ -15023,4 +15136,4 @@ function Canvas(props) {
15023
15136
 
15024
15137
  extend(THREE);
15025
15138
 
15026
- 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 };
15139
+ 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 };