@@ -11,6 +11,8 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
1111 // Set an unique ID for the dialog
1212 const [ id ] = useState ( `${ nanoid ( ) } ` )
1313
14+ const [ clickStartedInsideDialog , setClickStartedInsideDialog ] = useState ( undefined )
15+
1416 const parsedStyles = useMemo ( ( ) => {
1517 const _style = { ...style }
1618 if ( width ) _style . width = width
@@ -38,10 +40,16 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
3840 }
3941 }
4042
43+ function handleMouseUp ( e ) {
44+ setClickStartedInsideDialog ( false ) ;
45+ }
46+
4147 // Register eventhandlers
42- document . addEventListener ( 'keydown' , handleKeyDown )
48+ document . addEventListener ( 'keydown' , handleKeyDown ) ;
49+ document . addEventListener ( 'mouseup' , handleMouseUp ) ;
4350 return ( ) => {
44- document . removeEventListener ( 'keydown' , handleKeyDown )
51+ document . removeEventListener ( 'keydown' , handleKeyDown ) ;
52+ document . removeEventListener ( 'mouseup' , handleMouseUp )
4553 }
4654 } )
4755
@@ -58,6 +66,7 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
5866 }
5967
6068 function handleBackdropClick ( e ) {
69+ if ( clickStartedInsideDialog ) return ;
6170 const clickedBackdrop = e . target . id === `dialog-backdrop-${ id } `
6271
6372 if ( isOpen && clickedBackdrop ) {
@@ -76,15 +85,15 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
7685 return (
7786 isOpen === true &&
7887 < ScrollLock isActive = { isOpen } >
79- < div id = { `dialog-backdrop-${ id } ` } className = { `dialog-backdrop ${ className } ` } onClick = { ( e ) => handleBackdropClick ( e ) } >
88+ < div id = { `dialog-backdrop-${ id } ` } className = { `dialog-backdrop ${ className } ` } onMouseUp = { ( e ) => handleBackdropClick ( e ) } >
8089 < div
8190 id = { `dialog-${ id } ` }
8291 className = 'dialog'
8392 aria-label = 'dialog'
8493 aria-modal = 'true'
8594 role = 'dialog'
8695 style = { parsedStyles }
87- onClick = { ( e ) => { e . preventDefault ( ) ; e . stopPropagation ( ) ; } }
96+ onMouseDown = { ( e ) => { setClickStartedInsideDialog ( true ) ; e . preventDefault ( ) ; e . stopPropagation ( ) ; } }
8897 >
8998 { ! persistent && showCloseButton &&
9099 < button className = 'dialog-close-btn' onClick = { ( e ) => { handleCloseBtnClick ( ) ; e . preventDefault ( ) } } aria-label = 'Lukk' >
0 commit comments