diff --git a/packages/editor/src/components/tools/item/use-placement-coordinator.tsx b/packages/editor/src/components/tools/item/use-placement-coordinator.tsx index 7dc4ccff..de204d5f 100644 --- a/packages/editor/src/components/tools/item/use-placement-coordinator.tsx +++ b/packages/editor/src/components/tools/item/use-placement-coordinator.tsx @@ -1147,6 +1147,9 @@ export function usePlacementCoordinator(config: PlacementCoordinatorConfig): Rea const onShelfMove = (event: ShelfEvent) => { has3DPointerDrivenMoveRef.current = true + // A shelf event can fire before the cursor group mounts or after + // teardown, leaving the ref null; bail before dereferencing it below. + if (!cursorGroupRef.current) return const ctx = getContext() if (ctx.state.surface !== 'shelf-surface') { // Cursor entered via a move event without an enter — try