diff --git a/src/material/dialog/dialog-container.ts b/src/material/dialog/dialog-container.ts index 538c2bfb0139..95ac980793c7 100644 --- a/src/material/dialog/dialog-container.ts +++ b/src/material/dialog/dialog-container.ts @@ -25,7 +25,7 @@ import {MatDialogConfig} from './dialog-config'; import {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations'; import {CdkDialogContainer} from '@angular/cdk/dialog'; import {coerceNumberProperty} from '@angular/cdk/coercion'; -import {ComponentPortal} from '@angular/cdk/portal'; +import {ComponentPortal, PortalModule} from '@angular/cdk/portal'; /** Event that captures the state of dialog container animations. */ interface LegacyDialogAnimationEvent { @@ -56,6 +56,8 @@ export const CLOSE_ANIMATION_DURATION = 75; // Disabled for consistency with the non-MDC dialog container. // tslint:disable-next-line:validate-decorators changeDetection: ChangeDetectionStrategy.Default, + standalone: true, + imports: [PortalModule], host: { 'class': 'mat-mdc-dialog-container mdc-dialog', 'tabindex': '-1', diff --git a/src/material/dialog/dialog-content-directives.ts b/src/material/dialog/dialog-content-directives.ts index b2a84228f315..254542bce6e9 100644 --- a/src/material/dialog/dialog-content-directives.ts +++ b/src/material/dialog/dialog-content-directives.ts @@ -29,6 +29,7 @@ let dialogElementUid = 0; @Directive({ selector: '[mat-dialog-close], [matDialogClose]', exportAs: 'matDialogClose', + standalone: true, host: { '(click)': '_onButtonClick($event)', '[attr.aria-label]': 'ariaLabel || null', @@ -93,6 +94,7 @@ export class MatDialogClose implements OnInit, OnChanges { @Directive({ selector: '[mat-dialog-title], [matDialogTitle]', exportAs: 'matDialogTitle', + standalone: true, host: { 'class': 'mat-mdc-dialog-title mdc-dialog__title', '[id]': 'id', @@ -146,6 +148,7 @@ export class MatDialogTitle implements OnInit, OnDestroy { @Directive({ selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`, host: {'class': 'mat-mdc-dialog-content mdc-dialog__content'}, + standalone: true, }) export class MatDialogContent {} @@ -155,6 +158,7 @@ export class MatDialogContent {} */ @Directive({ selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`, + standalone: true, host: { 'class': 'mat-mdc-dialog-actions mdc-dialog__actions', '[class.mat-mdc-dialog-actions-align-center]': 'align === "center"', diff --git a/src/material/dialog/dialog.ts b/src/material/dialog/dialog.ts index cac91135b832..0c96aa4b579c 100644 --- a/src/material/dialog/dialog.ts +++ b/src/material/dialog/dialog.ts @@ -20,6 +20,7 @@ import { SkipSelf, TemplateRef, Type, + inject, } from '@angular/core'; import {MatDialogConfig} from './dialog-config'; import {MatDialogContainer} from './dialog-container'; @@ -39,16 +40,31 @@ export const MAT_DIALOG_DEFAULT_OPTIONS = new InjectionToken( /** Injection token that determines the scroll handling while the dialog is open. */ export const MAT_DIALOG_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>( 'mat-mdc-dialog-scroll-strategy', + { + providedIn: 'root', + factory: () => { + const overlay = inject(Overlay); + return () => overlay.scrollStrategies.block(); + }, + }, ); -/** @docs-private */ +/** + * @docs-private + * @deprecated No longer used. To be removed. + * @breaking-change 19.0.0 + */ export function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY( overlay: Overlay, ): () => ScrollStrategy { return () => overlay.scrollStrategies.block(); } -/** @docs-private */ +/** + * @docs-private + * @deprecated No longer used. To be removed. + * @breaking-change 19.0.0 + */ export const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = { provide: MAT_DIALOG_SCROLL_STRATEGY, deps: [Overlay], @@ -61,7 +77,7 @@ let uniqueId = 0; /** * Service to open Material Design modal dialogs. */ -@Injectable() +@Injectable({providedIn: 'root'}) export class MatDialog implements OnDestroy { private readonly _openDialogsAtThisLevel: MatDialogRef[] = []; private readonly _afterAllClosedAtThisLevel = new Subject(); diff --git a/src/material/dialog/module.ts b/src/material/dialog/module.ts index 0748d3b4a2d8..da2c0bd49704 100644 --- a/src/material/dialog/module.ts +++ b/src/material/dialog/module.ts @@ -11,7 +11,7 @@ import {OverlayModule} from '@angular/cdk/overlay'; import {PortalModule} from '@angular/cdk/portal'; import {NgModule} from '@angular/core'; import {MatCommonModule} from '@angular/material/core'; -import {MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MatDialog} from './dialog'; +import {MatDialog} from './dialog'; import {MatDialogContainer} from './dialog-container'; import { MatDialogActions, @@ -20,23 +20,17 @@ import { MatDialogTitle, } from './dialog-content-directives'; +const DIRECTIVES = [ + MatDialogContainer, + MatDialogClose, + MatDialogTitle, + MatDialogActions, + MatDialogContent, +]; + @NgModule({ - imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule], - exports: [ - MatDialogContainer, - MatDialogClose, - MatDialogTitle, - MatDialogContent, - MatDialogActions, - MatCommonModule, - ], - declarations: [ - MatDialogContainer, - MatDialogClose, - MatDialogTitle, - MatDialogActions, - MatDialogContent, - ], - providers: [MatDialog, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER], + imports: [DialogModule, OverlayModule, PortalModule, MatCommonModule, ...DIRECTIVES], + exports: [MatCommonModule, ...DIRECTIVES], + providers: [MatDialog], }) export class MatDialogModule {} diff --git a/tools/public_api_guard/material/dialog.md b/tools/public_api_guard/material/dialog.md index 5ca3250aef2c..18b68daa2f2b 100644 --- a/tools/public_api_guard/material/dialog.md +++ b/tools/public_api_guard/material/dialog.md @@ -18,10 +18,10 @@ import { FocusMonitor } from '@angular/cdk/a11y'; import { FocusOrigin } from '@angular/cdk/a11y'; import { FocusTrapFactory } from '@angular/cdk/a11y'; import * as i0 from '@angular/core'; -import * as i3 from '@angular/cdk/dialog'; -import * as i4 from '@angular/cdk/overlay'; -import * as i5 from '@angular/cdk/portal'; -import * as i6 from '@angular/material/core'; +import * as i1 from '@angular/cdk/dialog'; +import * as i2 from '@angular/cdk/overlay'; +import * as i3 from '@angular/cdk/portal'; +import * as i4 from '@angular/material/core'; import { InjectionToken } from '@angular/core'; import { Injector } from '@angular/core'; import { InteractivityChecker } from '@angular/cdk/a11y'; @@ -74,14 +74,14 @@ export const MAT_DIALOG_DEFAULT_OPTIONS: InjectionToken>; // @public export const MAT_DIALOG_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>; -// @public +// @public @deprecated export const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER: { provide: InjectionToken<() => ScrollStrategy>; deps: (typeof Overlay)[]; useFactory: typeof MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY; }; -// @public +// @public @deprecated export function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy; // @public @@ -113,7 +113,7 @@ export class MatDialog implements OnDestroy { export class MatDialogActions { align?: 'start' | 'center' | 'end'; // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; + static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } @@ -140,7 +140,7 @@ export class MatDialogClose implements OnInit, OnChanges { _onButtonClick(event: MouseEvent): void; type: 'submit' | 'button' | 'reset'; // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; + static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } @@ -194,7 +194,7 @@ export class MatDialogContainer extends CdkDialogContainer impl protected _openAnimationDone(totalTime: number): void; _startExitAnimation(): void; // (undocumented) - static ɵcmp: i0.ɵɵComponentDeclaration; + static ɵcmp: i0.ɵɵComponentDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } @@ -202,7 +202,7 @@ export class MatDialogContainer extends CdkDialogContainer impl // @public export class MatDialogContent { // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; + static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; } @@ -214,7 +214,7 @@ export class MatDialogModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public @@ -259,7 +259,7 @@ export class MatDialogTitle implements OnInit, OnDestroy { // (undocumented) ngOnInit(): void; // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; + static ɵdir: i0.ɵɵDirectiveDeclaration; // (undocumented) static ɵfac: i0.ɵɵFactoryDeclaration; }