@@ -3,6 +3,14 @@ function setScrollGutter(doc: Document) {
33 doc . body . style . setProperty ( '--dialog-scrollgutter' , `${ window . innerWidth - doc . body . clientWidth } px` )
44}
55
6+ function updateBodyModalClasses ( doc : Document ) {
7+ doc . body . classList . toggle ( 'has-modal' , Boolean ( doc . querySelector ( 'dialog[open]' ) ) )
8+ doc . body . classList . toggle (
9+ 'has-modal-disable-scroll' ,
10+ Boolean ( doc . querySelector ( 'dialog[open].Overlay--disableScroll' ) ) ,
11+ )
12+ }
13+
614function dialogInvokerButtonHandler ( event : Event ) {
715 const target = event . target as HTMLElement
816 const button = target ?. closest ( 'button' )
@@ -69,6 +77,8 @@ function dialogInvokerButtonHandler(event: Event) {
6977 { once : true } ,
7078 )
7179 }
80+
81+ updateBodyModalClasses ( dialog . ownerDocument )
7282 }
7383 }
7484
@@ -77,6 +87,7 @@ function dialogInvokerButtonHandler(event: Event) {
7787 const dialog = document . getElementById ( dialogId )
7888 if ( dialog instanceof HTMLDialogElement && dialog . open ) {
7989 dialog . close ( )
90+ updateBodyModalClasses ( dialog . ownerDocument )
8091 }
8192 }
8293}
@@ -91,6 +102,7 @@ export class DialogHelperElement extends HTMLElement {
91102 const { signal} = ( this . #abortController = new AbortController ( ) )
92103 document . addEventListener ( 'click' , dialogInvokerButtonHandler , true )
93104 document . addEventListener ( 'click' , this , { signal} )
105+ this . dialog ?. addEventListener ( 'close' , ( ) => updateBodyModalClasses ( this . dialog ! . ownerDocument ) , { signal} )
94106 new MutationObserver ( records => {
95107 for ( const record of records ) {
96108 if ( record . target === this . dialog ) {
@@ -107,14 +119,17 @@ export class DialogHelperElement extends HTMLElement {
107119
108120 #handleDialogOpenAttribute( ) {
109121 if ( ! this . dialog ) return
122+ const { ownerDocument} = this . dialog
110123 // We don't want to show the Dialog component as non-modal
111124 if ( this . dialog . matches ( '[open]:not(:modal)' ) ) {
112125 // eslint-disable-next-line no-restricted-syntax
113126 this . dialog . addEventListener ( 'close' , e => e . stopImmediatePropagation ( ) , { once : true } )
114127 this . dialog . close ( )
115- setScrollGutter ( this . dialog . ownerDocument )
128+ setScrollGutter ( ownerDocument )
116129 this . dialog . showModal ( )
117130 }
131+
132+ updateBodyModalClasses ( ownerDocument )
118133 }
119134
120135 handleEvent ( event : MouseEvent ) {
0 commit comments