From 4dd85993cb69752ab85c16622277369537f2cdab Mon Sep 17 00:00:00 2001 From: wass08 Date: Tue, 10 Feb 2026 11:00:11 +0900 Subject: [PATCH] fix issue undo history number input --- .../editor/components/ui/primitives/number-input.tsx | 12 +++++++++--- packages/core/src/store/use-scene.ts | 2 -- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/editor/components/ui/primitives/number-input.tsx b/apps/editor/components/ui/primitives/number-input.tsx index 89db024d..d2c6a30b 100644 --- a/apps/editor/components/ui/primitives/number-input.tsx +++ b/apps/editor/components/ui/primitives/number-input.tsx @@ -73,9 +73,15 @@ export function NumberInput({ document.removeEventListener('mousemove', handleMouseMove) document.removeEventListener('mouseup', handleMouseUp) - // Resume history tracking and commit final value - useScene.temporal.getState().resume() - onChange(finalValue) + // Reset to initial value while still paused (no history entry) + // Then resume and apply final value (creates single history entry) + if (finalValue !== startValueRef.current) { + onChange(startValueRef.current) + useScene.temporal.getState().resume() + onChange(finalValue) + } else { + useScene.temporal.getState().resume() + } } document.addEventListener('mousemove', handleMouseMove) diff --git a/packages/core/src/store/use-scene.ts b/packages/core/src/store/use-scene.ts index 3708f460..d1db3812 100644 --- a/packages/core/src/store/use-scene.ts +++ b/packages/core/src/store/use-scene.ts @@ -215,13 +215,11 @@ useScene.temporal.subscribe((state) => { const currentPastLength = state.pastStates.length const currentFutureLength = state.futureStates.length - // Undo: futureStates increases (state moved from past to future) // Redo: pastStates increases while futureStates decreases (state moved from future to past) const didUndo = currentFutureLength > prevFutureLength const didRedo = currentPastLength > prevPastLength && currentFutureLength < prevFutureLength - if (didUndo || didRedo) { // Use RAF to ensure all middleware and store updates are complete requestAnimationFrame(() => {