@@ -86,8 +86,10 @@ function fakePanInfo(dx: number, dy: number): PanInfo {
8686 } ;
8787}
8888
89- function fakePanInfoAt ( point : { x : number ; y : number } ) : PanInfo {
90- return { delta : { x : 0 , y : 0 } , offset : { x : 0 , y : 0 } , point, velocity : { x : 0 , y : 0 } } ;
89+ // Dock zones read the pointer event's client coordinates, not PanInfo.point (which is page
90+ // coordinates), so drag-to-dock tests build events carrying clientX/clientY.
91+ function fakePointerEventAt ( target : PointerEvent [ "target" ] , x : number , y : number ) : PointerEvent {
92+ return { target, clientX : x , clientY : y } as unknown as PointerEvent ;
9193}
9294
9395describe ( "the floating window's rect, wired with panel-layout's own constants" , ( ) => {
@@ -198,32 +200,34 @@ describe("FloatingAgentWindow's drag-to-dock zones", () => {
198200 const target = view . titleEl ( ) as unknown as PointerEvent [ "target" ] ;
199201
200202 act ( ( ) => {
201- view . dragHandleProps . onPanStart ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 0 , y : 0 } ) ) ;
202- view . dragHandleProps . onPan ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 1190 , y : 400 } ) ) ;
203+ view . dragHandleProps . onPanStart ! ( fakePointerEventAt ( target , 0 , 0 ) , fakePanInfo ( 0 , 0 ) ) ;
204+ view . dragHandleProps . onPan ! ( fakePointerEventAt ( target , 1190 , 400 ) , fakePanInfo ( - 20 , 0 ) ) ;
203205 } ) ;
204206
205207 expect ( document . body . textContent ) . toContain ( "Dock right" ) ;
206208 } ) ;
207209
208- it ( "calls onRequestModeChange with rightPanel on release in the right zone, without a rect jump " , ( ) => {
210+ it ( "restores the pre-drag rect and calls onRequestModeChange( rightPanel) on release in the right zone" , ( ) => {
209211 stubViewport ( 1200 , 900 ) ;
210212 const onRequestModeChange = vi . fn ( ) ;
211213 const view = renderFloatingAgentWindow ( onRequestModeChange ) ;
212214 const target = view . titleEl ( ) as unknown as PointerEvent [ "target" ] ;
215+ const leftBeforeDrag = view . outerLeft ( ) ;
213216
214217 act ( ( ) => {
215- view . dragHandleProps . onPanStart ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 0 , y : 0 } ) ) ;
216- view . dragHandleProps . onPan ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 1190 , y : 400 } ) ) ;
218+ view . dragHandleProps . onPanStart ! ( fakePointerEventAt ( target , 0 , 0 ) , fakePanInfo ( 0 , 0 ) ) ;
219+ view . dragHandleProps . onPan ! ( fakePointerEventAt ( target , 1190 , 400 ) , fakePanInfo ( - 200 , 0 ) ) ;
217220 } ) ;
218- const leftBeforeRelease = view . outerLeft ( ) ;
221+ // The drag really did move the rect, so the restore below undoes a real change.
222+ expect ( view . outerLeft ( ) ) . not . toBe ( leftBeforeDrag ) ;
219223
220224 act ( ( ) => {
221- view . dragHandleProps . onPanEnd ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 1190 , y : 400 } ) ) ;
225+ view . dragHandleProps . onPanEnd ! ( fakePointerEventAt ( target , 1190 , 400 ) , fakePanInfo ( 0 , 0 ) ) ;
222226 } ) ;
223227
224228 expect ( onRequestModeChange ) . toHaveBeenCalledTimes ( 1 ) ;
225229 expect ( onRequestModeChange ) . toHaveBeenCalledWith ( "rightPanel" ) ;
226- expect ( view . outerLeft ( ) ) . toBe ( leftBeforeRelease ) ;
230+ expect ( view . outerLeft ( ) ) . toBe ( leftBeforeDrag ) ;
227231 expect ( document . body . textContent ) . not . toContain ( "Dock right" ) ;
228232 } ) ;
229233
@@ -234,13 +238,13 @@ describe("FloatingAgentWindow's drag-to-dock zones", () => {
234238 const target = view . titleEl ( ) as unknown as PointerEvent [ "target" ] ;
235239
236240 act ( ( ) => {
237- view . dragHandleProps . onPanStart ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 0 , y : 0 } ) ) ;
238- view . dragHandleProps . onPan ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 500 , y : 5 } ) ) ;
241+ view . dragHandleProps . onPanStart ! ( fakePointerEventAt ( target , 0 , 0 ) , fakePanInfo ( 0 , 0 ) ) ;
242+ view . dragHandleProps . onPan ! ( fakePointerEventAt ( target , 500 , 5 ) , fakePanInfo ( 0 , - 20 ) ) ;
239243 } ) ;
240244 expect ( document . body . textContent ) . toContain ( "Fullscreen" ) ;
241245
242246 act ( ( ) => {
243- view . dragHandleProps . onPanEnd ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 500 , y : 5 } ) ) ;
247+ view . dragHandleProps . onPanEnd ! ( fakePointerEventAt ( target , 500 , 5 ) , fakePanInfo ( 0 , 0 ) ) ;
244248 } ) ;
245249
246250 expect ( onRequestModeChange ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -255,11 +259,11 @@ describe("FloatingAgentWindow's drag-to-dock zones", () => {
255259 const startLeft = view . outerLeft ( ) ;
256260
257261 act ( ( ) => {
258- view . dragHandleProps . onPanStart ! ( { target } as PointerEvent , fakePanInfo ( 0 , 0 ) ) ;
259- view . dragHandleProps . onPan ! ( { target } as PointerEvent , fakePanInfo ( - 20 , 0 ) ) ;
262+ view . dragHandleProps . onPanStart ! ( fakePointerEventAt ( target , 0 , 0 ) , fakePanInfo ( 0 , 0 ) ) ;
263+ view . dragHandleProps . onPan ! ( fakePointerEventAt ( target , 500 , 400 ) , fakePanInfo ( - 20 , 0 ) ) ;
260264 } ) ;
261265 act ( ( ) => {
262- view . dragHandleProps . onPanEnd ! ( { target } as PointerEvent , fakePanInfoAt ( { x : 500 , y : 400 } ) ) ;
266+ view . dragHandleProps . onPanEnd ! ( fakePointerEventAt ( target , 500 , 400 ) , fakePanInfo ( 0 , 0 ) ) ;
263267 } ) ;
264268
265269 expect ( onRequestModeChange ) . not . toHaveBeenCalled ( ) ;
0 commit comments