From 576e83ca62cf2310f262a3e6799732a57f1ecfc4 Mon Sep 17 00:00:00 2001 From: AlexZ005 Date: Wed, 7 Oct 2026 04:14:36 +0300 Subject: [PATCH 1/2] [fix] scrub fields: escape reverts typing, rows refresh after undo, one undo step per gesture 37 R26 (QUESTIONS-38-lock Q1-Q3): - DragRow: Escape after TYPING puts the box text back and ignores the blur's change event, so the typed value is no longer re-committed (Q1) - history: undo/redo poke selectedObject, so the Inspector transform rows show the restored values at once (Q2) - history gestures ($lib/historyGesture.js, a leaf): DragRow opens one per scrub and per typing session, SliderRow one per range drag; entries recorded in one gesture fold into the stack top in place (per-kind merges for transform, transformSet, aibatch, props, anim, animspeed, shadergraph; else a 'gesture' composite), and a fold that nets to nothing is dropped (Q3) - Inspector: the debounced transform seal carries its gesture; render order and light values (intensity + LIGHT_PARAMS) record props entries; Animation speed records an 'animspeed' entry - new e2e suite scrub-undo (NOT YET RUN at this commit: queued behind e2e slots) svelte-check 318/47 = baseline. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/components/editors/AnimationWindow.svelte | 2 +- src/components/menu/Inspector.svelte | 65 +++- src/components/ui/DragRow.svelte | 42 ++- src/components/ui/SliderRow.svelte | 11 +- src/lib/animationPreview.js | 39 +- src/lib/history.js | 154 ++++++++ src/lib/historyGesture.js | 37 ++ src/lib/objectActions.js | 27 +- src/lib/shaderSync.js | 12 +- tests/e2e/scrub-undo.test.cjs | 337 ++++++++++++++++++ 10 files changed, 698 insertions(+), 28 deletions(-) create mode 100644 src/lib/historyGesture.js create mode 100644 tests/e2e/scrub-undo.test.cjs diff --git a/src/components/editors/AnimationWindow.svelte b/src/components/editors/AnimationWindow.svelte index 929e0164..9e80c8f8 100644 --- a/src/components/editors/AnimationWindow.svelte +++ b/src/components/editors/AnimationWindow.svelte @@ -1781,7 +1781,7 @@ min={0.1} max={8} value={speed} - onchange={(/** @type {number} */ v) => target && setSpeed(target.uuid, v || 1)} + onchange={(/** @type {number} */ v) => target && setSpeed(target.uuid, v || 1, { record: true })} />