@@ -15,18 +15,22 @@ export default function (Alpine) {
1515 el . style . display = null ;
1616 el . hidden = false ;
1717 el . style . length === 0 && el . removeAttribute ( "style" ) ;
18+
19+ el . addEventListener ( "keydown" , escapeDialog ) ;
1820 el . addEventListener ( "mousedown" , backdropDialog ) ;
1921
2022 function scrollLock ( use = true ) {
2123 document . body . style . overflow = use ? "hidden" : "" ;
2224 }
2325
26+ // Prevent native escape for AlpineJs logic
2427 function escapeDialog ( event ) {
2528 if ( event . key !== "Escape" ) return ;
26- event . preventDefault ( ) ; // prevent native escape
29+ event . preventDefault ( ) ;
2730 evaluate ( ) ;
2831 }
2932
33+ // Mimics the new closeby=any attribute
3034 function backdropDialog ( event ) {
3135 const rect = el . getBoundingClientRect ( ) ;
3236 const isInDialog =
@@ -41,19 +45,17 @@ export default function (Alpine) {
4145 el . _x_doShow = ( ) => {
4246 if ( el . hasAttribute ( "open" ) ) return ;
4347 el . showModal ( ) ;
44- document . addEventListener ( "keydown" , escapeDialog ) ;
4548 scrollLock ( lockPageScroll ) ;
4649 } ;
4750
4851 el . _x_doHide = ( ) => {
4952 if ( ! el . hasAttribute ( "open" ) ) return ;
5053 el . close ( ) ;
51- document . removeEventListener ( "keydown" , escapeDialog ) ;
5254 scrollLock ( false ) ;
5355 } ;
5456
5557 cleanup ( ( ) => {
56- document . removeEventListener ( "keydown" , escapeDialog ) ;
58+ el . removeEventListener ( "keydown" , escapeDialog ) ;
5759 el . removeEventListener ( "mousedown" , backdropDialog ) ;
5860 scrollLock ( false ) ;
5961 } ) ;
0 commit comments