@@ -15,6 +15,7 @@ import { useCallSoon } from '../useCallSoon';
1515import { useStableHandler } from '../useStableHandler' ;
1616import { useGetOriginalItemOrder } from '../useGetOriginalItemOrder' ;
1717import { useDraggingPosition } from './useDraggingPosition' ;
18+ import { isOutsideOfContainer } from '../controlledEnvironment/layoutUtils' ;
1819
1920const DragAndDropContext = React . createContext < DragAndDropContextProps > (
2021 null as any
@@ -177,6 +178,20 @@ export const DragAndDropProvider: React.FC<React.PropsWithChildren> = ({
177178 }
178179 ) ;
179180
181+ const onDragLeaveContainerHandler = useStableHandler (
182+ (
183+ e : DragEvent ,
184+ containerRef : React . MutableRefObject < HTMLElement | undefined >
185+ ) => {
186+ if ( ! containerRef . current ) return ;
187+ if (
188+ isOutsideOfContainer ( e , containerRef . current . getBoundingClientRect ( ) )
189+ ) {
190+ setDraggingPosition ( undefined ) ;
191+ }
192+ }
193+ ) ;
194+
180195 const onDropHandler = useStableHandler ( ( ) => {
181196 if ( ! draggingItems || ! draggingPosition || ! environment . onDrop ) {
182197 return ;
@@ -287,6 +302,7 @@ export const DragAndDropProvider: React.FC<React.PropsWithChildren> = ({
287302 itemHeight : itemHeight . current ,
288303 isProgrammaticallyDragging,
289304 onDragOverTreeHandler,
305+ onDragLeaveContainerHandler,
290306 viableDragPositions,
291307 } ) ,
292308 [
@@ -297,6 +313,7 @@ export const DragAndDropProvider: React.FC<React.PropsWithChildren> = ({
297313 isProgrammaticallyDragging ,
298314 itemHeight ,
299315 onDragOverTreeHandler ,
316+ onDragLeaveContainerHandler ,
300317 onStartDraggingItems ,
301318 programmaticDragDown ,
302319 programmaticDragUp ,
0 commit comments