You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1 lines
68 KiB

{"version":3,"file":"dialog.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-config.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-container.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-container.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-ref.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-injectors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/dialog/dialog-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ViewContainerRef, Injector, StaticProvider, Type} from '@angular/core';\nimport {Direction} from '../bidi';\nimport {PositionStrategy, ScrollStrategy} from '../overlay';\nimport {Observable} from 'rxjs';\nimport {BasePortalOutlet} from '../portal';\nimport {FocusOrigin} from '../a11y';\n\n/** Options for where to set focus to automatically on dialog open */\nexport type AutoFocusTarget = 'dialog' | 'first-tabbable' | 'first-heading';\n\n/** Valid ARIA roles for a dialog. */\nexport type DialogRole = 'dialog' | 'alertdialog';\n\n/** Component that can be used as the container for the dialog. */\nexport type DialogContainer = BasePortalOutlet & {\n _focusTrapped?: Observable<void>;\n _closeInteractionType?: FocusOrigin;\n _recaptureFocus?: () => void;\n};\n\n/** Configuration for opening a modal dialog. */\nexport class DialogConfig<D = unknown, R = unknown, C extends DialogContainer = BasePortalOutlet> {\n /**\n * Where the attached component should live in Angular's *logical* component tree.\n * This affects what is available for injection and the change detection order for the\n * component instantiated inside of the dialog. This does not affect where the dialog\n * content will be rendered.\n */\n viewContainerRef?: ViewContainerRef;\n\n /**\n * Injector used for the instantiation of the component to be attached. If provided,\n * takes precedence over the injector indirectly provided by `ViewContainerRef`.\n */\n injector?: Injector;\n\n /** ID for the dialog. If omitted, a unique one will be generated. */\n id?: string;\n\n /** The ARIA role of the dialog element. */\n role?: DialogRole = 'dialog';\n\n /** Optional CSS class or classes applied to the overlay panel. */\n panelClass?: string | string[] = '';\n\n /** Whether the dialog has a backdrop. */\n hasBackdrop?: boolean = true;\n\n /** Optional CSS class or classes applied to the overlay backdrop. */\n backdropClass?: string | string[] = '';\n\n /** Whether the dialog closes with the escape key or pointer events outside the panel element. */\n disableClose?: boolean = false;\n\n /** Function used to determine whether the dialog is allowed to close. */\n closePredicate?: <\n Result = unknown,\n Component = unknown,\n Config extends DialogConfig = DialogConfig,\n >(\n result: Result | undefined,\n config: Config,\n componentInstance: Component | null,\n ) => boolean;\n\n /** Width of the dialog. */\n width?: string = '';\n\n /** Height of the dialog. */\n height?: string = '';\n\n /** Min-width of the dialog. If a number is provided, assumes pixel units. */\n minWidth?: number | string;\n\n /** Min-height of the dialog. If a number is provided, assumes pixel units. */\n minHeight?: number | string;\n\n /** Max-width of the dialog. If a number is provided, assumes pixel units. */\n maxWidth?: number | string;\n\n /** Max-height of the dialog. If a number is provided, assumes pixel units. */\n maxHeight?: number | string;\n\n /** Strategy to use when positioning the dialog. Defaults to centering it on the page. */\n positionStrategy?: PositionStrategy;\n\n /** Data being injected into the child component. */\n data?: D | null = null;\n\n /** Layout direction for the dialog's content. */\n direction?: Direction;\n\n /** ID of the element that describes the dialog. */\n ariaDescribedBy?: string | null = null;\n\n /** ID of the element that labels the dialog. */\n ariaLabelledBy?: string | null = null;\n\n /** Dialog label applied via `aria-label` */\n ariaLabel?: string | null = null;\n\n /**\n * Whether this is a modal dialog. Used to set the `aria-modal` attribute. Off by default,\n * because it can interfere with other overlay-based components (e.g. `mat-select`) and because\n * it is redundant since the dialog marks all outside content as `aria-hidden` anyway.\n */\n ariaModal?: boolean = false;\n\n /**\n * Where the dialog should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n autoFocus?: AutoFocusTarget | string | boolean = 'first-tabbable';\n\n /**\n * Whether the dialog should restore focus to the previously-focused element upon closing.\n * Has the following behavior based on the type that is passed in:\n * - `boolean` - when true, will return focus to the element that was focused before the dialog\n * was opened, otherwise won't restore focus at all.\n * - `string` - focus will be restored to the first element that matches the CSS selector.\n * - `HTMLElement` - focus will be restored to the specific element.\n */\n restoreFocus?: boolean | string | HTMLElement = true;\n\n /**\n * Scroll strategy to be used for the dialog. This determines how\n * the dialog responds to scrolling underneath the panel element.\n */\n scrollStrategy?: ScrollStrategy;\n\n /**\n * Whether the dialog should close when the user navigates backwards or forwards through browser\n * history. This does not apply to navigation via anchor element unless using URL-hash based\n * routing (`HashLocationStrategy` in the Angular router).\n */\n closeOnNavigation?: boolean = true;\n\n /**\n * Whether the dialog should close when the dialog service is destroyed. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead.\n */\n closeOnDestroy?: boolean = true;\n\n /**\n * Whether the dialog should close when the underlying overlay is detached. This is useful if\n * another service is wrapping the dialog and is managing the destruction instead. E.g. an\n * external detachment can happen as a result of a scroll strategy triggering it or when the\n * browser location changes.\n */\n closeOnOverlayDetachments?: boolean = true;\n\n /**\n * Whether the built-in overlay animations should be disabled.\n */\n disableAnimations?: boolean = false;\n\n /**\n * Providers that will be exposed to the contents of the dialog. Can also\n * be provided as a function in order to generate the providers lazily.\n */\n providers?:\n | StaticProvider[]\n | ((dialogRef: R, config: DialogConfig<D, R, C>, container: C) => StaticProvider[]);\n\n /**\n * Component into which the dialog content will be rendered. Defaults to `CdkDialogContainer`.\n * A configuration object can be passed in to customize the providers that will be exposed\n * to the dialog container.\n */\n container?:\n | Type<C>\n | {\n type: Type<C>;\n providers: (config: DialogConfig<D, R, C>) => StaticProvider[];\n };\n\n /**\n * Context that will be passed to template-based dialogs.\n * A function can be passed in to resolve the context lazily.\n */\n templateContext?: Record<string, any> | (() => Record<string, any>);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n FocusMonitor,\n FocusOrigin,\n FocusTrap,\n FocusTrapFactory,\n InteractivityChecker,\n} from '../a11y';\nimport {Platform, _getFocusedElementPierceShadowDom} from '../platform';\nimport {\n BasePortalOutlet,\n CdkPortalOutlet,\n ComponentPortal,\n DomPortal,\n TemplatePortal,\n} from '../portal';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n afterNextRender,\n inject,\n DOCUMENT,\n} from '@angular/core';\nimport {DialogConfig, DialogContainer} from './dialog-config';\nimport {Observable, Subject} from 'rxjs';\n\nexport function throwDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\n/**\n * Internal component that wraps user-provided dialog content.\n * @docs-private\n */\n@Component({\n selector: 'cdk-dialog-container',\n templateUrl: './dialog-container.html',\n styleUrl: 'dialog-container.css',\n encapsulation: ViewEncapsulation.None,\n // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n imports: [CdkPortalOutlet],\n host: {\n 'class': 'cdk-dialog-container',\n 'tabindex': '-1',\n '[attr.id]': '_config.id || null',\n '[attr.role]': '_config.role',\n '[attr.aria-modal]': '_config.ariaModal',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledByQueue[0]',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n },\n})\nexport class CdkDialogContainer<C extends DialogConfig = DialogConfig>\n extends BasePortalOutlet\n implements DialogContainer, OnDestroy\n{\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected _focusTrapFactory = inject(FocusTrapFactory);\n readonly _config: C;\n private _interactivityChecker = inject(InteractivityChecker);\n protected _ngZone = inject(NgZone);\n private _focusMonitor = inject(FocusMonitor);\n private _renderer = inject(Renderer2);\n protected readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private _injector = inject(Injector);\n private _platform = inject(Platform);\n protected _document = inject(DOCUMENT);\n\n /** The portal outlet inside of this container into which the dialog content will be loaded. */\n @ViewChild(CdkPortalOutlet, {static: true}) _portalOutlet!: CdkPortalOutlet;\n\n _focusTrapped: Observable<void> = new Subject<void>();\n\n /** The class that traps and manages focus within the dialog. */\n private _focusTrap: FocusTrap | null = null;\n\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n private _elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n /**\n * Type of interaction that led to the dialog being closed. This is used to determine\n * whether the focus style will be applied when returning focus to its original location\n * after the dialog is closed.\n */\n _closeInteractionType: FocusOrigin | null = null;\n\n /**\n * Queue of the IDs of the dialog's label element, based on their definition order. The first\n * ID will be used as the `aria-labelledby` value. We use a queue here to handle the case\n * where there are two or more titles in the DOM at a time and the first one is destroyed while\n * the rest are present.\n */\n _ariaLabelledByQueue: string[] = [];\n\n private _isDestroyed = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n\n // Callback is primarily for some internal tests\n // that were instantiating the dialog container manually.\n this._config = (inject(DialogConfig, {optional: true}) || new DialogConfig()) as C;\n\n if (this._config.ariaLabelledBy) {\n this._ariaLabelledByQueue.push(this._config.ariaLabelledBy);\n }\n }\n\n _addAriaLabelledBy(id: string) {\n this._ariaLabelledByQueue.push(id);\n this._changeDetectorRef.markForCheck();\n }\n\n _removeAriaLabelledBy(id: string) {\n const index = this._ariaLabelledByQueue.indexOf(id);\n\n if (index > -1) {\n this._ariaLabelledByQueue.splice(index, 1);\n this._changeDetectorRef.markForCheck();\n }\n }\n\n protected _contentAttached() {\n this._initializeFocusTrap();\n this._captureInitialFocus();\n }\n\n /**\n * Can be used by child classes to customize the initial focus\n * capturing behavior (e.g. if it's tied to an animation).\n */\n protected _captureInitialFocus() {\n this._trapFocus();\n }\n\n ngOnDestroy() {\n (this._focusTrapped as Subject<void>).complete();\n this._isDestroyed = true;\n this._restoreFocus();\n }\n\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n\n const result = this._portalOutlet.attachComponentPortal(portal);\n this._contentAttached();\n return result;\n }\n\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T> {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n\n const result = this._portalOutlet.attachTemplatePortal(portal);\n this._contentAttached();\n return result;\n }\n\n /**\n * Attaches a DOM portal to the dialog container.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n override attachDomPortal = (portal: DomPortal) => {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwDialogContentAlreadyAttachedError();\n }\n\n const result = this._portalOutlet.attachDomPortal(portal);\n this._contentAttached();\n return result;\n };\n\n // TODO(crisbeto): this shouldn't be exposed, but there are internal references to it.\n /** Captures focus if it isn't already inside the dialog. */\n _recaptureFocus() {\n if (!this._containsFocus()) {\n this._trapFocus();\n }\n }\n\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n private _forceFocus(element: HTMLElement, options?: FocusOptions) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n const callback = () => {\n deregisterBlur();\n deregisterMousedown();\n element.removeAttribute('tabindex');\n };\n\n const deregisterBlur = this._renderer.listen(element, 'blur', callback);\n const deregisterMousedown = this._renderer.listen(element, 'mousedown', callback);\n });\n }\n element.focus(options);\n }\n\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n private _focusByCssSelector(selector: string, options?: FocusOptions) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(\n selector,\n ) as HTMLElement | null;\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n\n /**\n * Moves the focus inside the focus trap. When autoFocus is not set to 'dialog', if focus\n * cannot be moved then focus will go to the dialog container.\n */\n protected _trapFocus(options?: FocusOptions) {\n if (this._isDestroyed) {\n return;\n }\n\n // If were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait until after the next render.\n afterNextRender(\n () => {\n const element = this._elementRef.nativeElement;\n switch (this._config.autoFocus) {\n case false:\n case 'dialog':\n // Ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (!this._containsFocus()) {\n element.focus(options);\n }\n break;\n case true:\n case 'first-tabbable':\n const focusedSuccessfully = this._focusTrap?.focusInitialElement(options);\n // If we weren't able to find a focusable element in the dialog, then focus the dialog\n // container instead.\n if (!focusedSuccessfully) {\n this._focusDialogContainer(options);\n }\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]', options);\n break;\n default:\n this._focusByCssSelector(this._config.autoFocus!, options);\n break;\n }\n (this._focusTrapped as Subject<void>).next();\n },\n {injector: this._injector},\n );\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private _restoreFocus() {\n const focusConfig = this._config.restoreFocus;\n let focusTargetElement: HTMLElement | null = null;\n\n if (typeof focusConfig === 'string') {\n focusTargetElement = this._document.querySelector(focusConfig);\n } else if (typeof focusConfig === 'boolean') {\n focusTargetElement = focusConfig ? this._elementFocusedBeforeDialogWasOpened : null;\n } else if (focusConfig) {\n focusTargetElement = focusConfig;\n }\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (\n this._config.restoreFocus &&\n focusTargetElement &&\n typeof focusTargetElement.focus === 'function'\n ) {\n const activeElement = _getFocusedElementPierceShadowDom();\n const element = this._elementRef.nativeElement;\n\n // Make sure that focus is still inside the dialog or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (\n !activeElement ||\n activeElement === this._document.body ||\n activeElement === element ||\n element.contains(activeElement)\n ) {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(focusTargetElement, this._closeInteractionType);\n this._closeInteractionType = null;\n } else {\n focusTargetElement.focus();\n }\n }\n }\n\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n\n /** Focuses the dialog container. */\n private _focusDialogContainer(options?: FocusOptions) {\n // Note that there is no focus method when rendering on the server.\n this._elementRef.nativeElement.focus?.(options);\n }\n\n /** Returns whether focus is inside the dialog. */\n private _containsFocus() {\n const element = this._elementRef.nativeElement;\n const activeElement = _getFocusedElementPierceShadowDom();\n return element === activeElement || element.contains(activeElement);\n }\n\n /** Sets up the focus trap. */\n private _initializeFocusTrap() {\n if (this._platform.isBrowser) {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n\n // Save the previously focused element. This element will be re-focused\n // when the dialog closes.\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = _getFocusedElementPierceShadowDom();\n }\n }\n }\n}\n","<ng-template cdkPortalOutlet />\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {OverlayRef} from '../overlay';\nimport {ESCAPE, hasModifierKey} from '../keycodes';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {DialogConfig, DialogContainer} from './dialog-config';\nimport {FocusOrigin} from '../a11y';\nimport {ComponentRef} from '@angular/core';\n\n/** Additional options that can be passed in when closing a dialog. */\nexport interface DialogCloseOptions {\n /** Focus original to use when restoring focus. */\n focusOrigin?: FocusOrigin;\n}\n\n/**\n * Reference to a dialog opened via the Dialog service.\n */\nexport class DialogRef<R = unknown, C = unknown> {\n /**\n * Instance of component opened into the dialog. Will be\n * null when the dialog is opened using a `TemplateRef`.\n */\n readonly componentInstance: C | null = null;\n\n /**\n * `ComponentRef` of the component opened into the dialog. Will be\n * null when the dialog is opened using a `TemplateRef`.\n */\n readonly componentRef: ComponentRef<C> | null = null;\n\n /** Instance of the container that is rendering out the dialog content. */\n readonly containerInstance!: DialogContainer;\n\n /** Whether the user is allowed to close the dialog. */\n disableClose: boolean | undefined;\n\n /** Emits when the dialog has been closed. */\n readonly closed: Observable<R | undefined> = new Subject<R | undefined>();\n\n /** Emits when the backdrop of the dialog is clicked. */\n readonly backdropClick: Observable<MouseEvent>;\n\n /** Emits when on keyboard events within the dialog. */\n readonly keydownEvents: Observable<KeyboardEvent>;\n\n /** Emits on pointer events that happen outside of the dialog. */\n readonly outsidePointerEvents: Observable<MouseEvent>;\n\n /** Unique ID for the dialog. */\n readonly id: string;\n\n /** Subscription to external detachments of the dialog. */\n private _detachSubscription: Subscription;\n\n constructor(\n readonly overlayRef: OverlayRef,\n readonly config: DialogConfig<any, DialogRef<R, C>, DialogContainer>,\n ) {\n this.disableClose = config.disableClose;\n this.backdropClick = overlayRef.backdropClick();\n this.keydownEvents = overlayRef.keydownEvents();\n this.outsidePointerEvents = overlayRef.outsidePointerEvents();\n this.id = config.id!; // By the time the dialog is created we are guaranteed to have an ID.\n\n this.keydownEvents.subscribe(event => {\n if (event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event)) {\n event.preventDefault();\n this.close(undefined, {focusOrigin: 'keyboard'});\n }\n });\n\n this.backdropClick.subscribe(() => {\n if (!this.disableClose && this._canClose()) {\n this.close(undefined, {focusOrigin: 'mouse'});\n } else {\n // Clicking on the backdrop will move focus out of dialog.\n // Recapture it if closing via the backdrop is disabled.\n this.containerInstance._recaptureFocus?.();\n }\n });\n\n this._detachSubscription = overlayRef.detachments().subscribe(() => {\n // Check specifically for `false`, because we want `undefined` to be treated like `true`.\n if (config.closeOnOverlayDetachments !== false) {\n this.close();\n }\n });\n }\n\n /**\n * Close the dialog.\n * @param result Optional result to return to the dialog opener.\n * @param options Additional options to customize the closing behavior.\n */\n close(result?: R, options?: DialogCloseOptions): void {\n if (this._canClose(result)) {\n const closedSubject = this.closed as Subject<R | undefined>;\n this.containerInstance._closeInteractionType = options?.focusOrigin || 'program';\n // Drop the detach subscription first since it can be triggered by the\n // `dispose` call and override the result of this closing sequence.\n this._detachSubscription.unsubscribe();\n this.overlayRef.dispose();\n closedSubject.next(result);\n closedSubject.complete();\n (this as {componentInstance: C}).componentInstance = (\n this as {containerInstance: DialogContainer}\n ).containerInstance = null!;\n }\n }\n\n /** Updates the position of the dialog based on the current position strategy. */\n updatePosition(): this {\n this.overlayRef.updatePosition();\n return this;\n }\n\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width: string | number = '', height: string | number = ''): this {\n this.overlayRef.updateSize({width, height});\n return this;\n }\n\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes: string | string[]): this {\n this.overlayRef.addPanelClass(classes);\n return this;\n }\n\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes: string | string[]): this {\n this.overlayRef.removePanelClass(classes);\n return this;\n }\n\n /** Whether the dialog is allowed to close. */\n private _canClose(result?: R): boolean {\n const config = this.config as DialogConfig<unknown, unknown, DialogContainer>;\n\n return (\n !!this.containerInstance &&\n (!config.closePredicate || config.closePredicate(result, config, this.componentInstance))\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken, Injector, inject} from '@angular/core';\nimport {createBlockScrollStrategy, ScrollStrategy} from '../overlay';\nimport {DialogConfig} from './dialog-config';\n\n/** Injection token for the Dialog's ScrollStrategy. */\nexport const DIALOG_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'DialogScrollStrategy',\n {\n providedIn: 'root',\n factory: () => {\n const injector = inject(Injector);\n return () => createBlockScrollStrategy(injector);\n },\n },\n);\n\n/** Injection token for the Dialog's Data. */\nexport const DIALOG_DATA = new InjectionToken<any>('DialogData');\n\n/** Injection token that can be used to provide default options for the dialog module. */\nexport const DEFAULT_DIALOG_CONFIG = new InjectionToken<DialogConfig>('DefaultDialogConfig');\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentRef,\n EventEmitter,\n Injectable,\n Injector,\n OnDestroy,\n StaticProvider,\n TemplateRef,\n Type,\n inject,\n signal,\n} from '@angular/core';\nimport {Observable, Subject, defer} from 'rxjs';\nimport {startWith, take} from 'rxjs/operators';\nimport {_IdGenerator} from '../a11y';\nimport {Direction, Directionality} from '../bidi';\nimport {\n ComponentType,\n createGlobalPositionStrategy,\n createOverlayRef,\n OverlayConfig,\n OverlayContainer,\n OverlayRef,\n} from '../overlay';\nimport {ComponentPortal, TemplatePortal} from '../portal';\nimport {DialogConfig, DialogContainer} from './dialog-config';\nimport {DialogRef} from './dialog-ref';\n\nimport {CdkDialogContainer} from './dialog-container';\nimport {DEFAULT_DIALOG_CONFIG, DIALOG_DATA, DIALOG_SCROLL_STRATEGY} from './dialog-injectors';\n\nfunction getDirectionality(value: Direction): Directionality {\n const valueSignal = signal(value);\n const change = new EventEmitter<Direction>();\n return {\n valueSignal,\n get value() {\n return valueSignal();\n },\n change,\n ngOnDestroy() {\n change.complete();\n },\n };\n}\n\n@Injectable({providedIn: 'root'})\nexport class Dialog implements OnDestroy {\n private _injector = inject(Injector);\n private _defaultOptions = inject<DialogConfig>(DEFAULT_DIALOG_CONFIG, {optional: true});\n private _parentDialog = inject(Dialog, {optional: true, skipSelf: true});\n private _overlayContainer = inject(OverlayContainer);\n private _idGenerator = inject(_IdGenerator);\n\n private _openDialogsAtThisLevel: DialogRef<any, any>[] = [];\n private readonly _afterAllClosedAtThisLevel = new Subject<void>();\n private readonly _afterOpenedAtThisLevel = new Subject<DialogRef>();\n private _ariaHiddenElements = new Map<Element, string | null>();\n private _scrollStrategy = inject(DIALOG_SCROLL_STRATEGY);\n\n /** Keeps track of the currently-open dialogs. */\n get openDialogs(): readonly DialogRef<any, any>[] {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n\n /** Stream that emits when a dialog has been opened. */\n get afterOpened(): Subject<DialogRef<any, any>> {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n readonly afterAllClosed: Observable<void> = defer(() =>\n this.openDialogs.length\n ? this._getAfterAllClosed()\n : this._getAfterAllClosed().pipe(startWith(undefined)),\n );\n\n constructor(...args: unknown[]);\n\n constructor() {}\n\n /**\n * Opens a modal dialog containing the given component.\n * @param component Type of the component to load into the dialog.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened dialog.\n */\n open<R = unknown, D = unknown, C = unknown>(\n component: ComponentType<C>,\n config?: DialogConfig<D, DialogRef<R, C>>,\n ): DialogRef<R, C>;\n\n /**\n * Opens a modal dialog containing the given template.\n * @param template TemplateRef to instantiate as the dialog content.\n * @param config Extra configuration options.\n * @returns Reference to the newly-opened dialog.\n */\n open<R = unknown, D = unknown, C = unknown>(\n template: TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>,\n ): DialogRef<R, C>;\n\n open<R = unknown, D = unknown, C = unknown>(\n componentOrTemplateRef: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>,\n ): DialogRef<R, C>;\n\n open<R = unknown, D = unknown, C = unknown>(\n componentOrTemplateRef: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>,\n ): DialogRef<R, C> {\n const defaults = (this._defaultOptions || new DialogConfig()) as DialogConfig<\n D,\n DialogRef<R, C>\n >;\n config = {...defaults, ...config};\n config.id = config.id || this._idGenerator.getId('cdk-dialog-');\n\n if (\n config.id &&\n this.getDialogById(config.id) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n\n const overlayConfig = this._getOverlayConfig(config);\n const overlayRef = createOverlayRef(this._injector, overlayConfig);\n const dialogRef = new DialogRef(overlayRef, config);\n const dialogContainer = this._attachContainer(overlayRef, dialogRef, config);\n\n (dialogRef as {containerInstance: DialogContainer}).containerInstance = dialogContainer;\n\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n // Resolve this ahead of time, because some internal apps\n // mock it out and depend on it being synchronous.\n const overlayContainer = this._overlayContainer.getContainerElement();\n\n if (dialogContainer._focusTrapped) {\n dialogContainer._focusTrapped.pipe(take(1)).subscribe(() => {\n this._hideNonDialogContentFromAssistiveTechnology(overlayContainer);\n });\n } else {\n this._hideNonDialogContentFromAssistiveTechnology(overlayContainer);\n }\n }\n\n this._attachDialogContent(componentOrTemplateRef, dialogRef, dialogContainer, config);\n (this.openDialogs as DialogRef<R, C>[]).push(dialogRef);\n dialogRef.closed.subscribe(() => this._removeOpenDialog(dialogRef, true));\n this.afterOpened.next(dialogRef);\n\n return dialogRef;\n }\n\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll(): void {\n reverseForEach(this.openDialogs, dialog => dialog.close());\n }\n\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById<R, C>(id: string): DialogRef<R, C> | undefined {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n\n ngOnDestroy() {\n // Make one pass over all the dialogs that need to be untracked, but should not be closed. We\n // want to stop tracking the open dialog even if it hasn't been closed, because the tracking\n // determines when `aria-hidden` is removed from elements outside the dialog.\n reverseForEach(this._openDialogsAtThisLevel, dialog => {\n // Check for `false` specifically since we want `undefined` to be interpreted as `true`.\n if (dialog.config.closeOnDestroy === false) {\n this._removeOpenDialog(dialog, false);\n }\n });\n\n // Make a second pass and close the remaining dialogs. We do this second pass in order to\n // correctly dispatch the `afterAllClosed` event in case we have a mixed array of dialogs\n // that should be closed and dialogs that should not.\n reverseForEach(this._openDialogsAtThisLevel, dialog => dialog.close());\n\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n this._openDialogsAtThisLevel = [];\n }\n\n /**\n * Creates an overlay config from a dialog config.\n * @param config The dialog configuration.\n * @returns The overlay configuration.\n */\n private _getOverlayConfig<D, R>(config: DialogConfig<D, R>): OverlayConfig {\n const state = new OverlayConfig({\n positionStrategy:\n config.positionStrategy ||\n createGlobalPositionStrategy(this._injector).centerHorizontally().centerVertically(),\n scrollStrategy: config.scrollStrategy || this._scrollStrategy(),\n panelClass: config.panelClass,\n hasBackdrop: config.hasBackdrop,\n direction: config.direction,\n minWidth: config.minWidth,\n minHeight: config.minHeight,\n maxWidth: config.maxWidth,\n maxHeight: config.maxHeight,\n width: config.width,\n height: config.height,\n disposeOnNavigation: config.closeOnNavigation,\n disableAnimations: config.disableAnimations,\n });\n\n if (config.backdropClass) {\n state.backdropClass = config.backdropClass;\n }\n\n return state;\n }\n\n /**\n * Attaches a dialog container to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n private _attachContainer<R, D, C>(\n overlay: OverlayRef,\n dialogRef: DialogRef<R, C>,\n config: DialogConfig<D, DialogRef<R, C>>,\n ): DialogContainer {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers: StaticProvider[] = [\n {provide: DialogConfig, useValue: config},\n {provide: DialogRef, useValue: dialogRef},\n {provide: OverlayRef, useValue: overlay},\n ];\n let containerType: Type<DialogContainer>;\n\n if (config.container) {\n if (typeof config.container === 'function') {\n containerType = config.container;\n } else {\n containerType = config.container.type;\n providers.push(...config.container.providers(config));\n }\n } else {\n containerType = CdkDialogContainer;\n }\n\n const containerPortal = new ComponentPortal(\n containerType,\n config.viewContainerRef,\n Injector.create({parent: userInjector || this._injector, providers}),\n );\n const containerRef = overlay.attach(containerPortal);\n\n return containerRef.instance;\n }\n\n /**\n * Attaches the user-provided component to the already-created dialog container.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param config Configuration used to open the dialog.\n */\n private _attachDialogContent<R, D, C>(\n componentOrTemplateRef: ComponentType<C> | TemplateRef<C>,\n dialogRef: DialogRef<R, C>,\n dialogContainer: DialogContainer,\n config: DialogConfig<D, DialogRef<R, C>>,\n ) {\n if (componentOrTemplateRef instanceof TemplateRef) {\n const injector = this._createInjector(config, dialogRef, dialogContainer, undefined);\n let context: any = {$implicit: config.data, dialogRef};\n\n if (config.templateContext) {\n context = {\n ...context,\n ...(typeof config.templateContext === 'function'\n ? config.templateContext()\n : config.templateContext),\n };\n }\n\n dialogContainer.attachTemplatePortal(\n new TemplatePortal<C>(componentOrTemplateRef, null!, context, injector),\n );\n } else {\n const injector = this._createInjector(config, dialogRef, dialogContainer, this._injector);\n const contentRef = dialogContainer.attachComponentPortal<C>(\n new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector),\n );\n (dialogRef as {componentRef: ComponentRef<C>}).componentRef = contentRef;\n (dialogRef as {componentInstance: C}).componentInstance = contentRef.instance;\n }\n }\n\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog being opened.\n * @param dialogContainer Component that is going to wrap the dialog content.\n * @param fallbackInjector Injector to use as a fallback when a lookup fails in the custom\n * dialog injector, if the user didn't provide a custom one.\n * @returns The custom injector that can be used inside the dialog.\n */\n private _createInjector<R, D, C>(\n config: DialogConfig<D, DialogRef<R, C>>,\n dialogRef: DialogRef<R, C>,\n dialogContainer: DialogContainer,\n fallbackInjector: Injector | undefined,\n ): Injector {\n const userInjector = config.injector || config.viewContainerRef?.injector;\n const providers: StaticProvider[] = [\n {provide: DIALOG_DATA, useValue: config.data},\n {provide: DialogRef, useValue: dialogRef},\n ];\n\n if (config.providers) {\n if (typeof config.providers === 'function') {\n providers.push(...config.providers(dialogRef, config, dialogContainer));\n } else {\n providers.push(...config.providers);\n }\n }\n\n if (\n config.direction &&\n (!userInjector ||\n !userInjector.get<Directionality | null>(Directionality, null, {optional: true}))\n ) {\n providers.push({\n provide: Directionality,\n useValue: getDirectionality(config.direction),\n });\n }\n\n return Injector.create({parent: userInjector || fallbackInjector, providers});\n }\n\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n * @param emitEvent Whether to emit an event if this is the last dialog.\n */\n private _removeOpenDialog<R, C>(dialogRef: DialogRef<R, C>, emitEvent: boolean) {\n const index = this.openDialogs.indexOf(dialogRef);\n\n if (index > -1) {\n (this.openDialogs as DialogRef<R, C>[]).splice(index, 1);\n\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n\n this._ariaHiddenElements.clear();\n\n if (emitEvent) {\n this._getAfterAllClosed().next();\n }\n }\n }\n }\n\n /** Hides all of the content that isn't an overlay from assistive technology. */\n private _hideNonDialogContentFromAssistiveTechnology(overlayContainer: HTMLElement) {\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n\n for (let i = siblings.length - 1; i > -1; i--) {\n const sibling = siblings[i];\n\n if (\n sibling !== overlayContainer &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live') &&\n !sibling.hasAttribute('popover')\n ) {\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n\n private _getAfterAllClosed(): Subject<void> {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n}\n\n/**\n * Executes a callback against all elements in an array while iterating in reverse.\n * Useful if the array is being modified as it is being iterated.\n */\nfunction reverseForEach<T>(items: T[] | readonly T[], callback: (current: T) => void) {\n let i = items.length;\n\n while (i--) {\n callback(items[i]);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {OverlayModule} from '../overlay';\nimport {PortalModule} from '../portal';\nimport {A11yModule} from '../a11y';\nimport {Dialog} from './dialog';\nimport {CdkDialogContainer} from './dialog-container';\n\n@NgModule({\n imports: [OverlayModule, PortalModule, A11yModule, CdkDialogContainer],\n exports: [\n // Re-export the PortalModule so that people extending the `CdkDialogContainer`\n // don't have to remember to import it or be faced with an unhelpful error.\n PortalModule,\n CdkDialogContainer,\n ],\n providers: [Dialog],\n})\nexport class DialogModule {}\n\n// Re-export needed by the Angular compiler.\n// See: https://github.com/angular/components/issues/30663.\n// Note: These exports need to be stable and shouldn't be renamed unnecessarily because\n// consuming libraries might have references to them in their own partial compilation output.\nexport {CdkPortal as ɵɵCdkPortal, CdkPortalOutlet as ɵɵCdkPortalOutlet} from '../portal';\n"],"names":["DialogConfig","viewContainerRef","injector","id","role","panelClass","hasBackdrop","backdropClass","disableClose","closePredicate","width","height","minWidth","minHeight","maxWidth","maxHeight","positionStrategy","data","direction","ariaDescribedBy","ariaLabelledBy","ariaLabel","ariaModal","autoFocus","restoreFocus","scrollStrategy","closeOnNavigation","closeOnDestroy","closeOnOverlayDetachments","disableAnimations","providers","container","templateContext","throwDialogContentAlreadyAttachedError","Error","CdkDialogContainer","BasePortalOutlet","_elementRef","inject","ElementRef","_focusTrapFactory","FocusTrapFactory","_config","_interactivityChecker","InteractivityChecker","_ngZone","NgZone","_focusMonitor","FocusMonitor","_renderer","Renderer2","_changeDetectorRef","ChangeDetectorRef","_injector","Injector","_platform","Platform","_document","DOCUMENT","_portalOutlet","_focusTrapped","Subject","_focusTrap","_elementFocusedBeforeDialogWasOpened","_closeInteractionType","_ariaLabelledByQueue","_isDestroyed","constructor","optional","push","_addAriaLabelledBy","markForCheck","_removeAriaLabelledBy","index","indexOf","splice","_contentAttached","_initializeFocusTrap","_captureInitialFocus","_trapFocus","ngOnDestroy","complete","_restoreFocus","attachComponentPortal","portal","hasAttached","ngDevMode","result","attachTemplatePortal","attachDomPortal","_recaptureFocus","_containsFocus","_forceFocus","element","options","isFocusable","tabIndex","runOutsideAngular","callback","deregisterBlur","deregisterMousedown","removeAttribute","listen","focus","_focusByCssSelector","selector","elementToFocus","nativeElement","querySelector","afterNextRender","focusedSuccessfully","focusInitialElement","_focusDialogContainer","next","focusConfig","focusTargetElement","activeElement","_getFocusedElementPierceShadowDom","body","contains","focusVia","destroy","isBrowser","create","deps","target","i0","ɵɵFactoryTarget","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","type","isStandalone","host","attributes","properties","classAttribute","viewQueries","propertyName","first","predicate","CdkPortalOutlet","descendants","static","usesInheritance","ngImport","template","inputs","outputs","exportAs","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","decorators","args","imports","styles","ViewChild","DialogRef","overlayRef","config","componentInstance","componentRef","containerInstance","closed","backdropClick","keydownEvents","outsidePointerEvents","_detachSubscription","subscribe","event","keyCode","ESCAPE","hasModifierKey","preventDefault","close","undefined","focusOrigin","_canClose","detachments","closedSubject","unsubscribe","dispose","updatePosition","updateSize","addPanelClass","classes","removePanelClass","DIALOG_SCROLL_STRATEGY","InjectionToken","providedIn","factory","createBlockScrollStrategy","DIALOG_DATA","DEFAULT_DIALOG_CONFIG","getDirectionality","value","valueSignal","signal","change","EventEmitter","Dialog","_defaultOptions","_parentDialog","skipSelf","_overlayContainer","OverlayContainer","_idGenerator","_IdGenerator","_openDialogsAtThisLevel","_afterAllClosedAtThisLevel","_afterOpenedAtThisLevel","_ariaHiddenElements","Map","_scrollStrategy","openDialogs","afterOpened","afterAllClosed","defer","length","_getAfterAllClosed","pipe","startWith","open","componentOrTemplateRef","defaults","getId","getDialogById","overlayConfig","_getOverlayConfig","createOverlayRef","dialogRef","dialogContainer","_attachContainer","overlayContainer","getContainerElement","take","_hideNonDialogContentFromAssistiveTechnology","_attachDialogContent","_removeOpenDialog","closeAll","reverseForEach","dialog","find","state","OverlayConfig","createGlobalPositionStrategy","centerHorizontally","centerVertically","disposeOnNavigation","overlay","userInjector","provide","useValue","OverlayRef","containerType","containerPortal","ComponentPortal","parent","containerRef","attach","instance","TemplateRef","_createInjector","context","$implicit","TemplatePortal","contentRef","fallbackInjector","get","Directionality","emitEvent","forEach","previousValue","setAttribute","clear","parentElement","siblings","children","i","sibling","nodeName","hasAttribute","set","getAttribute","Injectable","ɵprov","ɵɵngDeclareInjectable","items","DialogModule","NgModule","ɵmod","ɵɵngDeclareNgModule","OverlayModule","PortalModule","A11yModule","exports"],"mappings":"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"}