@@ -42,6 +42,14 @@ function pressOptions(element: HTMLElement) {
4242 rafPausedRef : ref ( false ) ,
4343 onManualDragStartRef : ref ( vi . fn ( ) ) ,
4444 onBlockedMoveRef : ref ( vi . fn ( ) ) ,
45+ onPathOffsetCommitRef : ref ( vi . fn ( ) ) ,
46+ snapGuidesRef : ref ( null ) ,
47+ groupGestureRef : ref ( null ) ,
48+ blockedMoveRef : ref ( null ) ,
49+ setOverlayRect : vi . fn ( ) ,
50+ suppressNextBoxClickRef : ref ( false ) ,
51+ hoverSelectionRef : ref ( null ) ,
52+ onCanvasMouseDown : vi . fn ( ) ,
4553 } ;
4654}
4755
@@ -81,3 +89,27 @@ describe("a drag press on a centred element without GSAP", () => {
8189 expect ( element . getAttribute ( "style" ) ) . toBe ( style ) ;
8290 } ) ;
8391} ) ;
92+
93+ describe ( "a drag on an element without GSAP" , ( ) => {
94+ it ( "drops on the route it chose at press, even if GSAP takes the element over mid-drag" , ( ) => {
95+ const element = document . createElement ( "div" ) ;
96+ element . style . setProperty ( "translate" , "40px 30px" ) ;
97+ document . body . append ( element ) ;
98+ const opts = pressOptions ( element ) ;
99+ const handlers = createDomEditOverlayGestureHandlers ( opts as never ) ;
100+ expect ( handlers . startGesture ( "drag" , PRESS as never ) ) . toBe ( true ) ;
101+ Object . assign ( element , { _gsap : { renderTransform : ( ) => { } } } ) ;
102+ const release = {
103+ ...PRESS ,
104+ clientX : 110 ,
105+ clientY : 70 ,
106+ currentTarget : { releasePointerCapture ( ) { } } ,
107+ } ;
108+ handlers . onPointerUp ( release as never ) ;
109+ expect ( opts . onPathOffsetCommitRef . current ) . toHaveBeenCalledWith (
110+ expect . anything ( ) ,
111+ expect . anything ( ) ,
112+ expect . objectContaining ( { plainTranslate : true } ) ,
113+ ) ;
114+ } ) ;
115+ } ) ;
0 commit comments