@@ -11,7 +11,7 @@ import { ownsPlainKeys } from "../../utils/typingTarget";
1111import { acquireCanvasNudgeKeys } from "../../utils/canvasNudgeGate" ;
1212import {
1313 addStudioPendingEditFlushListener ,
14- trackStudioPendingEdit ,
14+ beginStudioPendingEdit ,
1515} from "../../utils/studioPendingEdits" ;
1616import type { DomEditSelection } from "./domEditing" ;
1717import {
@@ -31,6 +31,7 @@ import {
3131 applyManualOffsetNudgeDraft ,
3232 createManualOffsetDragMember ,
3333 endManualOffsetDragMembers ,
34+ manualOffsetMoveRevert ,
3435 restoreManualOffsetDragMembers ,
3536 type ManualOffsetDragMember ,
3637} from "./manualOffsetDrag" ;
@@ -47,7 +48,7 @@ interface NudgeSession {
4748 /** Accumulated delta of the burst, in composition px. */
4849 accum : { x : number ; y : number } ;
4950 timer : ReturnType < typeof setTimeout > | null ;
50- endPendingEdit : ( saved ?: Promise < unknown > ) => void ;
51+ edit : ReturnType < typeof beginStudioPendingEdit > ;
5152}
5253
5354export interface UseDomEditNudgeParams {
@@ -161,11 +162,16 @@ export function useDomEditNudge(params: UseDomEditNudgeParams): { flushNudge: ()
161162 next : applyManualOffsetNudgeCommit ( member , session . accum ) ,
162163 plainTranslate : member . plainTranslate ,
163164 } ) ) ;
164- const commit = session . isGroup
165- ? p . onGroupPathOffsetCommitRef . current ( updates )
166- : p . onPathOffsetCommitRef . current ( updates [ 0 ] . selection , updates [ 0 ] . next , {
167- plainTranslate : updates [ 0 ] . plainTranslate ,
168- } ) ;
165+ const commit = session . edit . adopt ( ( ) =>
166+ session . isGroup
167+ ? p . onGroupPathOffsetCommitRef . current ( updates )
168+ : p . onPathOffsetCommitRef . current ( updates [ 0 ] . selection , updates [ 0 ] . next , {
169+ plainTranslate : updates [ 0 ] . plainTranslate ,
170+ } ) ,
171+ ) ;
172+ if ( session . edit . reverted ( ) )
173+ for ( const member of session . members )
174+ restoreStudioPathOffset ( member . element , member . initialPathOffset ) ;
169175 saved = Promise . resolve ( commit )
170176 . catch ( ( ) => {
171177 for ( const member of session . members ) {
@@ -177,7 +183,7 @@ export function useDomEditNudge(params: UseDomEditNudgeParams): { flushNudge: ()
177183 . finally ( ( ) => endManualOffsetDragMembers ( session . members ) ) ;
178184 return saved ;
179185 } finally {
180- session . endPendingEdit ( saved ) ;
186+ session . edit . settle ( saved ) ;
181187 }
182188 } ;
183189 const commitSessionRef = useRef ( commitSession ) ;
@@ -190,7 +196,7 @@ export function useDomEditNudge(params: UseDomEditNudgeParams): { flushNudge: ()
190196 if ( session . timer ) clearTimeout ( session . timer ) ;
191197 restoreManualOffsetDragMembers ( session . members ) ;
192198 endManualOffsetDragMembers ( session . members ) ;
193- session . endPendingEdit ( ) ;
199+ session . edit . settle ( ) ;
194200 } , [ params . allowCanvasMovement ] ) ;
195201
196202 // Build drag members for the current target set — the same member snapshot a
@@ -217,9 +223,8 @@ export function useDomEditNudge(params: UseDomEditNudgeParams): { flushNudge: ()
217223 if ( members . length === 0 ) return null ;
218224 // Same side effect a drag start has (pauses preview playback).
219225 p . onManualDragStartRef . current ?.( ) ;
220- let endPendingEdit : NudgeSession [ "endPendingEdit" ] = ( ) => { } ;
221- trackStudioPendingEdit ( new Promise < unknown > ( ( resolve ) => ( endPendingEdit = resolve ) ) ) ;
222- return { members, isGroup, accum : { x : 0 , y : 0 } , timer : null , endPendingEdit } ;
226+ const edit = beginStudioPendingEdit ( manualOffsetMoveRevert ( members ) ) ;
227+ return { members, isGroup, accum : { x : 0 , y : 0 } , timer : null , edit } ;
223228 } ;
224229
225230 const handleKeyDown = ( event : KeyboardEvent ) => {
0 commit comments