@@ -19,7 +19,7 @@ import {
1919 signal ,
2020} from '@angular/core' ;
2121import { Observable , Subject , defer } from 'rxjs' ;
22- import { startWith } from 'rxjs/operators' ;
22+ import { startWith , take } from 'rxjs/operators' ;
2323import { _IdGenerator } from '../a11y' ;
2424import { Direction , Directionality } from '../bidi' ;
2525import {
@@ -30,8 +30,8 @@ import {
3030 OverlayContainer ,
3131 OverlayRef ,
3232} from '../overlay' ;
33- import { BasePortalOutlet , ComponentPortal , TemplatePortal } from '../portal' ;
34- import { DialogConfig } from './dialog-config' ;
33+ import { ComponentPortal , TemplatePortal } from '../portal' ;
34+ import { DialogConfig , DialogContainer } from './dialog-config' ;
3535import { DialogRef } from './dialog-ref' ;
3636
3737import { CdkDialogContainer } from './dialog-container' ;
@@ -141,14 +141,21 @@ export class Dialog implements OnDestroy {
141141 const dialogRef = new DialogRef ( overlayRef , config ) ;
142142 const dialogContainer = this . _attachContainer ( overlayRef , dialogRef , config ) ;
143143
144- ( dialogRef as { containerInstance : BasePortalOutlet } ) . containerInstance = dialogContainer ;
145- this . _attachDialogContent ( componentOrTemplateRef , dialogRef , dialogContainer , config ) ;
144+ ( dialogRef as { containerInstance : DialogContainer } ) . containerInstance = dialogContainer ;
146145
147146 // If this is the first dialog that we're opening, hide all the non-overlay content.
148147 if ( ! this . openDialogs . length ) {
149- this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
148+ if ( dialogContainer . _focusTrapped ) {
149+ dialogContainer . _focusTrapped . pipe ( take ( 1 ) ) . subscribe ( ( ) => {
150+ this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
151+ } ) ;
152+ } else {
153+ this . _hideNonDialogContentFromAssistiveTechnology ( ) ;
154+ }
150155 }
151156
157+ this . _attachDialogContent ( componentOrTemplateRef , dialogRef , dialogContainer , config ) ;
158+
152159 ( this . openDialogs as DialogRef < R , C > [ ] ) . push ( dialogRef ) ;
153160 dialogRef . closed . subscribe ( ( ) => this . _removeOpenDialog ( dialogRef , true ) ) ;
154161 this . afterOpened . next ( dialogRef ) ;
@@ -233,14 +240,14 @@ export class Dialog implements OnDestroy {
233240 overlay : OverlayRef ,
234241 dialogRef : DialogRef < R , C > ,
235242 config : DialogConfig < D , DialogRef < R , C > > ,
236- ) : BasePortalOutlet {
243+ ) : DialogContainer {
237244 const userInjector = config . injector || config . viewContainerRef ?. injector ;
238245 const providers : StaticProvider [ ] = [
239246 { provide : DialogConfig , useValue : config } ,
240247 { provide : DialogRef , useValue : dialogRef } ,
241248 { provide : OverlayRef , useValue : overlay } ,
242249 ] ;
243- let containerType : Type < BasePortalOutlet > ;
250+ let containerType : Type < DialogContainer > ;
244251
245252 if ( config . container ) {
246253 if ( typeof config . container === 'function' ) {
@@ -274,7 +281,7 @@ export class Dialog implements OnDestroy {
274281 private _attachDialogContent < R , D , C > (
275282 componentOrTemplateRef : ComponentType < C > | TemplateRef < C > ,
276283 dialogRef : DialogRef < R , C > ,
277- dialogContainer : BasePortalOutlet ,
284+ dialogContainer : DialogContainer ,
278285 config : DialogConfig < D , DialogRef < R , C > > ,
279286 ) {
280287 if ( componentOrTemplateRef instanceof TemplateRef ) {
@@ -316,7 +323,7 @@ export class Dialog implements OnDestroy {
316323 private _createInjector < R , D , C > (
317324 config : DialogConfig < D , DialogRef < R , C > > ,
318325 dialogRef : DialogRef < R , C > ,
319- dialogContainer : BasePortalOutlet ,
326+ dialogContainer : DialogContainer ,
320327 fallbackInjector : Injector | undefined ,
321328 ) : Injector {
322329 const userInjector = config . injector || config . viewContainerRef ?. injector ;
0 commit comments