@@ -41,9 +41,12 @@ export type Events = {
4141 onClick : EventListener
4242 onContextMenu : EventListener
4343 onDoubleClick : EventListener
44+ onDragEnter : EventListener
45+ onDragLeave : EventListener
4446 onDragOverEnter : EventListener
4547 onDragOverLeave : EventListener
4648 onDrop : EventListener
49+ onDropMissed : EventListener
4750 onWheel : EventListener
4851 onPointerDown : EventListener
4952 onPointerUp : EventListener
@@ -57,6 +60,8 @@ export type EventHandlers = {
5760 onClick ?: ( event : ThreeEvent < MouseEvent > ) => void
5861 onContextMenu ?: ( event : ThreeEvent < MouseEvent > ) => void
5962 onDoubleClick ?: ( event : ThreeEvent < MouseEvent > ) => void
63+ onDragEnter ?: ( event : ThreeEvent < DragEvent > ) => void
64+ onDragLeave ?: ( event : ThreeEvent < DragEvent > ) => void
6065 onDragOverEnter ?: ( event : ThreeEvent < DragEvent > ) => void
6166 onDragOverLeave ?: ( event : ThreeEvent < DragEvent > ) => void
6267 onDragOverMissed ?: ( event : DragEvent ) => void
@@ -113,6 +118,8 @@ export function getEventPriority() {
113118 case 'click' :
114119 case 'contextmenu' :
115120 case 'dblclick' :
121+ case 'dragenter' :
122+ case 'dragleave' :
116123 case 'drop' :
117124 case 'pointercancel' :
118125 case 'pointerdown' :
@@ -186,7 +193,9 @@ export function createEvents(store: UseBoundStore<RootState>) {
186193 [ 'Move' , 'Over' , 'Enter' , 'Out' , 'Leave' ] . some (
187194 ( name ) => ( obj as unknown as Instance ) . __r3f ?. handlers [ ( 'onPointer' + name ) as keyof EventHandlers ] ,
188195 ) ||
189- [ 'Over' ] . some ( ( name ) => ( obj as unknown as Instance ) . __r3f ?. handlers [ ( 'onDrag' + name ) as keyof EventHandlers ] ) ,
196+ [ 'Over' , 'Enter' , 'Leave' ] . some (
197+ ( name ) => ( obj as unknown as Instance ) . __r3f ?. handlers [ ( 'onDrag' + name ) as keyof EventHandlers ] ,
198+ ) ,
190199 )
191200 }
192201
@@ -401,6 +410,7 @@ export function createEvents(store: UseBoundStore<RootState>) {
401410 switch ( name ) {
402411 case 'onPointerLeave' :
403412 case 'onPointerCancel' :
413+ case 'onDragLeave' :
404414 return ( ) => cancelPointer ( [ ] )
405415 case 'onLostPointerCapture' :
406416 return ( event : DomEvent ) => {
@@ -423,7 +433,7 @@ export function createEvents(store: UseBoundStore<RootState>) {
423433
424434 // Get fresh intersects
425435 const isPointerMove = name === 'onPointerMove'
426- const isDragOver = name === 'onDragOverEnter' || name === 'onDragOverLeave '
436+ const isDragOver = name === 'onDragOver '
427437 const isDrop = name === 'onDrop'
428438 const isClickEvent = name === 'onClick' || name === 'onContextMenu' || name === 'onDoubleClick'
429439 const filter = isPointerMove ? filterPointerEvents : undefined
0 commit comments