From 428f3b98973be4c0bdfca5af98267b536aa618dc Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 09:58:11 +0100 Subject: [PATCH 1/8] fix(cdk/collections): breaking changes for v20 Changes the deprecated APIs for v20 in `cdk/collections`. BREAKING CHANGE: * `SelectionModel.clear` now returns a boolean. * `SelectionModel.deselect` now returns a boolean. * `SelectionModel.select` now returns a boolean. * `SelectionModel.setSelection` now returns a boolean. * `SelectionModel.toggle` now returns a boolean. --- src/cdk/collections/selection-model.ts | 15 +++++---------- tools/public_api_guard/cdk/collections.md | 10 +++++----- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/cdk/collections/selection-model.ts b/src/cdk/collections/selection-model.ts index cf9ca587d959..3519e9d5dc76 100644 --- a/src/cdk/collections/selection-model.ts +++ b/src/cdk/collections/selection-model.ts @@ -58,9 +58,8 @@ export class SelectionModel { * Selects a value or an array of values. * @param values The values to select * @return Whether the selection changed as a result of this call - * @breaking-change 16.0.0 make return type boolean */ - select(...values: T[]): boolean | void { + select(...values: T[]): boolean { this._verifyValueAssignment(values); values.forEach(value => this._markSelected(value)); const changed = this._hasQueuedChanges(); @@ -72,9 +71,8 @@ export class SelectionModel { * Deselects a value or an array of values. * @param values The values to deselect * @return Whether the selection changed as a result of this call - * @breaking-change 16.0.0 make return type boolean */ - deselect(...values: T[]): boolean | void { + deselect(...values: T[]): boolean { this._verifyValueAssignment(values); values.forEach(value => this._unmarkSelected(value)); const changed = this._hasQueuedChanges(); @@ -86,9 +84,8 @@ export class SelectionModel { * Sets the selected values * @param values The new selected values * @return Whether the selection changed as a result of this call - * @breaking-change 16.0.0 make return type boolean */ - setSelection(...values: T[]): boolean | void { + setSelection(...values: T[]): boolean { this._verifyValueAssignment(values); const oldValues = this.selected; const newSelectedSet = new Set(values.map(value => this._getConcreteValue(value))); @@ -105,9 +102,8 @@ export class SelectionModel { * Toggles a value between selected and deselected. * @param value The value to toggle * @return Whether the selection changed as a result of this call - * @breaking-change 16.0.0 make return type boolean */ - toggle(value: T): boolean | void { + toggle(value: T): boolean { return this.isSelected(value) ? this.deselect(value) : this.select(value); } @@ -116,9 +112,8 @@ export class SelectionModel { * @param flushEvent Whether to flush the changes in an event. * If false, the changes to the selection will be flushed along with the next event. * @return Whether the selection changed as a result of this call - * @breaking-change 16.0.0 make return type boolean */ - clear(flushEvent = true): boolean | void { + clear(flushEvent = true): boolean { this._unmarkAll(); const changed = this._hasQueuedChanges(); if (flushEvent) { diff --git a/tools/public_api_guard/cdk/collections.md b/tools/public_api_guard/cdk/collections.md index 9c29898a18e4..d71c1a92ed85 100644 --- a/tools/public_api_guard/cdk/collections.md +++ b/tools/public_api_guard/cdk/collections.md @@ -73,19 +73,19 @@ export interface SelectionChange { export class SelectionModel { constructor(_multiple?: boolean, initiallySelectedValues?: T[], _emitChanges?: boolean, compareWith?: ((o1: T, o2: T) => boolean) | undefined); readonly changed: Subject>; - clear(flushEvent?: boolean): boolean | void; + clear(flushEvent?: boolean): boolean; // (undocumented) compareWith?: ((o1: T, o2: T) => boolean) | undefined; - deselect(...values: T[]): boolean | void; + deselect(...values: T[]): boolean; hasValue(): boolean; isEmpty(): boolean; isMultipleSelection(): boolean; isSelected(value: T): boolean; - select(...values: T[]): boolean | void; + select(...values: T[]): boolean; get selected(): T[]; - setSelection(...values: T[]): boolean | void; + setSelection(...values: T[]): boolean; sort(predicate?: (a: T, b: T) => number): void; - toggle(value: T): boolean | void; + toggle(value: T): boolean; } // @public From 60e0a0495dfc01f1ec880a3ed760b233a0a9e329 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:00:48 +0100 Subject: [PATCH 2/8] fix(cdk/dialog): breaking changes for v20 Removes the deprecated symbols for v20 from `cdk/dialog`. BREAKING CHANGE: * `DIALOG_SCROLL_STRATEGY_PROVIDER` has been removed. * `DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY` has been removed. --- src/cdk/dialog/dialog-injectors.ts | 20 -------------------- tools/public_api_guard/cdk/dialog.md | 11 ----------- 2 files changed, 31 deletions(-) diff --git a/src/cdk/dialog/dialog-injectors.ts b/src/cdk/dialog/dialog-injectors.ts index c23a61f281b1..db4d69955d81 100644 --- a/src/cdk/dialog/dialog-injectors.ts +++ b/src/cdk/dialog/dialog-injectors.ts @@ -27,23 +27,3 @@ export const DIALOG_DATA = new InjectionToken('DialogData'); /** Injection token that can be used to provide default options for the dialog module. */ export const DEFAULT_DIALOG_CONFIG = new InjectionToken('DefaultDialogConfig'); - -/** - * @docs-private - * @deprecated No longer used. To be removed. - * @breaking-change 19.0.0 - */ -export function DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy { - return () => overlay.scrollStrategies.block(); -} - -/** - * @docs-private - * @deprecated No longer used. To be removed. - * @breaking-change 19.0.0 - */ -export const DIALOG_SCROLL_STRATEGY_PROVIDER = { - provide: DIALOG_SCROLL_STRATEGY, - deps: [Overlay], - useFactory: DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, -}; diff --git a/tools/public_api_guard/cdk/dialog.md b/tools/public_api_guard/cdk/dialog.md index a26513b53b44..30dc7104b9dc 100644 --- a/tools/public_api_guard/cdk/dialog.md +++ b/tools/public_api_guard/cdk/dialog.md @@ -25,7 +25,6 @@ import { Injector } from '@angular/core'; import { NgZone } from '@angular/core'; import { Observable } from 'rxjs'; import { OnDestroy } from '@angular/core'; -import { Overlay } from '@angular/cdk/overlay'; import { OverlayRef } from '@angular/cdk/overlay'; import { PositionStrategy } from '@angular/cdk/overlay'; import { ScrollStrategy } from '@angular/cdk/overlay'; @@ -107,16 +106,6 @@ export const DIALOG_DATA: InjectionToken; // @public export const DIALOG_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>; -// @public @deprecated -export const DIALOG_SCROLL_STRATEGY_PROVIDER: { - provide: InjectionToken<() => ScrollStrategy>; - deps: (typeof Overlay)[]; - useFactory: typeof DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY; -}; - -// @public @deprecated -export function DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy; - // @public export interface DialogCloseOptions { focusOrigin?: FocusOrigin; From 94b5a72ab8d8a95b8e2b9aaf419a8523d47f6d3d Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:02:21 +0100 Subject: [PATCH 3/8] fix(cdk/drag-drop): breaking changes for v20 Makes the breaking changes in `cdk/drag-drop` for v20. BREAKING CHANGE: * `DragDropRegistry` is no longer generic. * `DragDropRegistry.scroll` has been removed. Use the `scrolled` method instead. --- src/cdk/drag-drop/drag-drop-registry.ts | 15 ++++----------- tools/public_api_guard/cdk/drag-drop.md | 8 +++----- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/cdk/drag-drop/drag-drop-registry.ts b/src/cdk/drag-drop/drag-drop-registry.ts index f5e797ec36dd..96d48c3a3d2e 100644 --- a/src/cdk/drag-drop/drag-drop-registry.ts +++ b/src/cdk/drag-drop/drag-drop-registry.ts @@ -50,19 +50,19 @@ const activeCapturingEventOptions = { }) export class _ResetsLoader {} -// TODO(crisbeto): remove generics when making breaking changes. /** * Service that keeps track of all the drag item and drop container * instances, and manages global event listeners on the `document`. * @docs-private */ @Injectable({providedIn: 'root'}) -export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { +export class DragDropRegistry implements OnDestroy { private _ngZone = inject(NgZone); private _document = inject(DOCUMENT); private _styleLoader = inject(_CdkPrivateStyleLoader); private _renderer = inject(RendererFactory2).createRenderer(null, null); private _cleanupDocumentTouchmove: (() => void) | undefined; + private _scroll: Subject = new Subject(); /** Registered drop container instances. */ private _dropInstances = new Set(); @@ -101,13 +101,6 @@ export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { */ readonly pointerUp: Subject = new Subject(); - /** - * Emits when the viewport has been scrolled while the user is dragging an item. - * @deprecated To be turned into a private member. Use the `scrolled` method instead. - * @breaking-change 13.0.0 - */ - readonly scroll: Subject = new Subject(); - constructor(...args: unknown[]); constructor() {} @@ -180,7 +173,7 @@ export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { const toBind: [name: string, handler: (event: Event) => void, options: _ListenerOptions][] = [ // Use capturing so that we pick up scroll changes in any scrollable nodes that aren't // the document. See https://github.com/angular/components/issues/17144. - ['scroll', (e: Event) => this.scroll.next(e), capturingEventOptions], + ['scroll', (e: Event) => this._scroll.next(e), capturingEventOptions], // Preventing the default action on `mousemove` isn't enough to disable text selection // on Safari so we need to prevent the selection event as well. Alternatively this can @@ -245,7 +238,7 @@ export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { * be used to include an additional top-level listener at the shadow root level. */ scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable { - const streams: Observable[] = [this.scroll]; + const streams: Observable[] = [this._scroll]; if (shadowRoot && shadowRoot !== this._document) { // Note that this is basically the same as `fromEvent` from rxjs, but we do it ourselves, diff --git a/tools/public_api_guard/cdk/drag-drop.md b/tools/public_api_guard/cdk/drag-drop.md index 3a580646aee3..95b58933c86c 100644 --- a/tools/public_api_guard/cdk/drag-drop.md +++ b/tools/public_api_guard/cdk/drag-drop.md @@ -352,7 +352,7 @@ export class DragDropModule { } // @public -export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { +export class DragDropRegistry implements OnDestroy { constructor(...args: unknown[]); getDragDirectiveForNode(node: Node): CdkDrag | null; isDragging(drag: DragRef): boolean; @@ -366,15 +366,13 @@ export class DragDropRegistry<_ = unknown, __ = unknown> implements OnDestroy { removeDirectiveNode(node: Node): void; removeDragItem(drag: DragRef): void; removeDropContainer(drop: DropListRef): void; - // @deprecated - readonly scroll: Subject; scrolled(shadowRoot?: DocumentOrShadowRoot | null): Observable; startDragging(drag: DragRef, event: TouchEvent | MouseEvent): void; stopDragging(drag: DragRef): void; // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration, never>; + static ɵfac: i0.ɵɵFactoryDeclaration; // (undocumented) - static ɵprov: i0.ɵɵInjectableDeclaration>; + static ɵprov: i0.ɵɵInjectableDeclaration; } // @public From 4e0e7c33e26a817e12708ac535cb4e71dbfd3a7c Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:03:55 +0100 Subject: [PATCH 4/8] fix(cdk/table): breaking changes for v20 Makes the breaking changes for v20 in `cdk/table`. BREAKING CHANGE: * `Constructor` symbol has been removed. * `CanStickCtor` symbol has been removed. * `mixinHasStickyInput` has been removed. Implement the `CanStick` interface instead. --- src/cdk/table/can-stick.ts | 50 ----------------------------- tools/public_api_guard/cdk/table.md | 9 ------ 2 files changed, 59 deletions(-) diff --git a/src/cdk/table/can-stick.ts b/src/cdk/table/can-stick.ts index f235beaebddf..0010fee7a207 100644 --- a/src/cdk/table/can-stick.ts +++ b/src/cdk/table/can-stick.ts @@ -6,11 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion'; - -/** @docs-private */ -export type Constructor = new (...args: any[]) => T; - /** * Interface for a mixin to provide a directive with a function that checks if the sticky input has * been changed since the last time the function was called. Essentially adds a dirty-check to the @@ -27,48 +22,3 @@ export interface CanStick { /** Resets the dirty check for cases where the sticky state has been used without checking. */ resetStickyChanged(): void; } - -/** @docs-private */ -export type CanStickCtor = Constructor; - -/** - * Mixin to provide a directive with a function that checks if the sticky input has been - * changed since the last time the function was called. Essentially adds a dirty-check to the - * sticky value. - * @docs-private - * @deprecated Implement the `CanStick` interface instead. - * @breaking-change 19.0.0 - */ -export function mixinHasStickyInput>(base: T): CanStickCtor & T { - return class extends base { - /** Whether sticky positioning should be applied. */ - get sticky(): boolean { - return this._sticky; - } - set sticky(v: BooleanInput) { - const prevValue = this._sticky; - this._sticky = coerceBooleanProperty(v); - this._hasStickyChanged = prevValue !== this._sticky; - } - _sticky: boolean = false; - - /** Whether the sticky input has changed since it was last checked. */ - _hasStickyChanged: boolean = false; - - /** Whether the sticky value has changed since this was last called. */ - hasStickyChanged(): boolean { - const hasStickyChanged = this._hasStickyChanged; - this._hasStickyChanged = false; - return hasStickyChanged; - } - - /** Resets the dirty check for cases where the sticky state has been used without checking. */ - resetStickyChanged() { - this._hasStickyChanged = false; - } - - constructor(...args: any[]) { - super(...args); - } - }; -} diff --git a/tools/public_api_guard/cdk/table.md b/tools/public_api_guard/cdk/table.md index 46e113ca032a..663756ef942c 100644 --- a/tools/public_api_guard/cdk/table.md +++ b/tools/public_api_guard/cdk/table.md @@ -63,9 +63,6 @@ export interface CanStick { sticky: boolean; } -// @public -export type CanStickCtor = Constructor; - // @public export const CDK_ROW_TEMPLATE = ""; @@ -442,9 +439,6 @@ export class _CoalescedStyleScheduler { static ɵprov: i0.ɵɵInjectableDeclaration<_CoalescedStyleScheduler>; } -// @public -export type Constructor = new (...args: any[]) => T; - // @public export class DataRowOutlet implements RowOutlet { constructor(...args: unknown[]); @@ -486,9 +480,6 @@ export class HeaderRowOutlet implements RowOutlet { static ɵfac: i0.ɵɵFactoryDeclaration; } -// @public @deprecated -export function mixinHasStickyInput>(base: T): CanStickCtor & T; - // @public export class NoDataRowOutlet implements RowOutlet { constructor(...args: unknown[]); From 63c9e2d5cac4487b3ee882ce32e48bb4a3fc23b1 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:07:35 +0100 Subject: [PATCH 5/8] fix(material/slide-toggle): breaking changes for v20 Makes the breaking changes in `material/slide-toggle` for v20. BREAKING CHANGE: * `MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR` has been removed. * `MAT_SLIDE_TOGGLE_VALUE_ACCESSOR` has been removed. * `MatSlideToggleRequiredValidator` has been removed. * `_MatSlideToggleRequiredValidatorModule` has been removed. --- .../slide-toggle-forms-example.ts | 13 +------ src/material/slide-toggle/module.ts | 11 ------ src/material/slide-toggle/public-api.ts | 1 - .../slide-toggle-required-validator.ts | 38 ------------------- src/material/slide-toggle/slide-toggle.ts | 16 +++----- .../public_api_guard/material/slide-toggle.md | 35 +---------------- 6 files changed, 9 insertions(+), 105 deletions(-) delete mode 100644 src/material/slide-toggle/slide-toggle-required-validator.ts diff --git a/src/components-examples/material/slide-toggle/slide-toggle-forms/slide-toggle-forms-example.ts b/src/components-examples/material/slide-toggle/slide-toggle-forms/slide-toggle-forms-example.ts index 08ea68cf4963..c8a88fa163fc 100644 --- a/src/components-examples/material/slide-toggle/slide-toggle-forms/slide-toggle-forms-example.ts +++ b/src/components-examples/material/slide-toggle/slide-toggle-forms/slide-toggle-forms-example.ts @@ -1,10 +1,7 @@ import {Component, inject} from '@angular/core'; import {FormBuilder, FormGroup, Validators, FormsModule, ReactiveFormsModule} from '@angular/forms'; import {MatButtonModule} from '@angular/material/button'; -import { - MatSlideToggleModule, - _MatSlideToggleRequiredValidatorModule, -} from '@angular/material/slide-toggle'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; /** * @title Slide-toggle with forms @@ -13,13 +10,7 @@ import { selector: 'slide-toggle-forms-example', templateUrl: './slide-toggle-forms-example.html', styleUrl: './slide-toggle-forms-example.css', - imports: [ - MatSlideToggleModule, - FormsModule, - _MatSlideToggleRequiredValidatorModule, - MatButtonModule, - ReactiveFormsModule, - ], + imports: [MatSlideToggleModule, FormsModule, MatButtonModule, ReactiveFormsModule], }) export class SlideToggleFormsExample { private _formBuilder = inject(FormBuilder); diff --git a/src/material/slide-toggle/module.ts b/src/material/slide-toggle/module.ts index 5cd649e160d2..0e8bfd531f01 100644 --- a/src/material/slide-toggle/module.ts +++ b/src/material/slide-toggle/module.ts @@ -9,17 +9,6 @@ import {NgModule} from '@angular/core'; import {MatCommonModule} from '@angular/material/core'; import {MatSlideToggle} from './slide-toggle'; -import {MatSlideToggleRequiredValidator} from './slide-toggle-required-validator'; - -/** - * @deprecated No longer used, `MatSlideToggle` implements required validation directly. - * @breaking-change 19.0.0 - */ -@NgModule({ - imports: [MatSlideToggleRequiredValidator], - exports: [MatSlideToggleRequiredValidator], -}) -export class _MatSlideToggleRequiredValidatorModule {} @NgModule({ imports: [MatSlideToggle, MatCommonModule], diff --git a/src/material/slide-toggle/public-api.ts b/src/material/slide-toggle/public-api.ts index ed6b5aca9de4..47aee9dd3653 100644 --- a/src/material/slide-toggle/public-api.ts +++ b/src/material/slide-toggle/public-api.ts @@ -9,4 +9,3 @@ export * from './slide-toggle'; export * from './slide-toggle-config'; export * from './module'; -export * from './slide-toggle-required-validator'; diff --git a/src/material/slide-toggle/slide-toggle-required-validator.ts b/src/material/slide-toggle/slide-toggle-required-validator.ts deleted file mode 100644 index 750ddd01d460..000000000000 --- a/src/material/slide-toggle/slide-toggle-required-validator.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {Directive, forwardRef, Provider} from '@angular/core'; -import {CheckboxRequiredValidator, NG_VALIDATORS} from '@angular/forms'; - -/** - * @deprecated No longer used, `MatCheckbox` implements required validation directly. - * @breaking-change 19.0.0 - */ -export const MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR: Provider = { - provide: NG_VALIDATORS, - useExisting: forwardRef(() => MatSlideToggleRequiredValidator), - multi: true, -}; - -/** - * Validator for Material slide-toggle components with the required attribute in a - * template-driven form. The default validator for required form controls asserts - * that the control value is not undefined but that is not appropriate for a slide-toggle - * where the value is always defined. - * - * Required slide-toggle form controls are valid when checked. - * - * @deprecated No longer used, `MatCheckbox` implements required validation directly. - * @breaking-change 19.0.0 - */ -@Directive({ - selector: `mat-slide-toggle[required][formControlName], - mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]`, - providers: [MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR], -}) -export class MatSlideToggleRequiredValidator extends CheckboxRequiredValidator {} diff --git a/src/material/slide-toggle/slide-toggle.ts b/src/material/slide-toggle/slide-toggle.ts index 7d8a09bf97cc..6dd97599792a 100644 --- a/src/material/slide-toggle/slide-toggle.ts +++ b/src/material/slide-toggle/slide-toggle.ts @@ -43,16 +43,6 @@ import { import {_MatInternalFormField, _StructuralStylesLoader, MatRipple} from '@angular/material/core'; import {_CdkPrivateStyleLoader} from '@angular/cdk/private'; -/** - * @deprecated Will stop being exported. - * @breaking-change 19.0.0 - */ -export const MAT_SLIDE_TOGGLE_VALUE_ACCESSOR = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => MatSlideToggle), - multi: true, -}; - /** Change event object emitted by a slide toggle. */ export class MatSlideToggleChange { constructor( @@ -84,7 +74,11 @@ export class MatSlideToggleChange { encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ - MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => MatSlideToggle), + multi: true, + }, { provide: NG_VALIDATORS, useExisting: MatSlideToggle, diff --git a/tools/public_api_guard/material/slide-toggle.md b/tools/public_api_guard/material/slide-toggle.md index e8a125f3d01e..ecae09c3fa7a 100644 --- a/tools/public_api_guard/material/slide-toggle.md +++ b/tools/public_api_guard/material/slide-toggle.md @@ -7,36 +7,23 @@ import { AbstractControl } from '@angular/forms'; import { AfterContentInit } from '@angular/core'; import { ChangeDetectorRef } from '@angular/core'; -import { CheckboxRequiredValidator } from '@angular/forms'; import { ControlValueAccessor } from '@angular/forms'; import { ElementRef } from '@angular/core'; import { EventEmitter } from '@angular/core'; import { FocusMonitor } from '@angular/cdk/a11y'; import * as i0 from '@angular/core'; -import * as i3 from '@angular/material/core'; +import * as i2 from '@angular/material/core'; import { InjectionToken } from '@angular/core'; import { OnChanges } from '@angular/core'; import { OnDestroy } from '@angular/core'; -import { Provider } from '@angular/core'; import { SimpleChanges } from '@angular/core'; import { ThemePalette } from '@angular/material/core'; -import { Type } from '@angular/core'; import { ValidationErrors } from '@angular/forms'; import { Validator } from '@angular/forms'; // @public export const MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS: InjectionToken; -// @public @deprecated (undocumented) -export const MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR: Provider; - -// @public @deprecated (undocumented) -export const MAT_SLIDE_TOGGLE_VALUE_ACCESSOR: { - provide: InjectionToken; - useExisting: Type; - multi: boolean; -}; - // @public (undocumented) export class MatSlideToggle implements OnDestroy, AfterContentInit, OnChanges, ControlValueAccessor, Validator { constructor(...args: unknown[]); @@ -131,25 +118,7 @@ export class MatSlideToggleModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; -} - -// @public @deprecated -export class MatSlideToggleRequiredValidator extends CheckboxRequiredValidator { - // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; - // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; -} - -// @public @deprecated (undocumented) -export class _MatSlideToggleRequiredValidatorModule { - // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration<_MatSlideToggleRequiredValidatorModule, never>; - // (undocumented) - static ɵinj: i0.ɵɵInjectorDeclaration<_MatSlideToggleRequiredValidatorModule>; - // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration<_MatSlideToggleRequiredValidatorModule, never, [typeof i1.MatSlideToggleRequiredValidator], [typeof i1.MatSlideToggleRequiredValidator]>; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // (No @packageDocumentation comment for this package) From 6166de50037aa0dd8cd064769cf816fd24662d8e Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:09:04 +0100 Subject: [PATCH 6/8] fix(material/checkbox): breaking changes for v20 Removes the deprecated symbols for v20 from the checkbox. BREAKING CHANGE: * `MAT_CHECKBOX_REQUIRED_VALIDATOR` has been removed. * `MAT_CHECKBOX_VALUE_ACCESSOR` has been removed. * `MatCheckboxRequiredValidator` has been removed. * `_MatCheckboxRequiredValidatorModule` has been removed. --- .../checkbox/checkbox-required-validator.ts | 35 ------------------- src/material/checkbox/checkbox.ts | 16 +++------ src/material/checkbox/module.ts | 11 ------ src/material/checkbox/public-api.ts | 1 - tools/public_api_guard/material/checkbox.md | 30 ++-------------- 5 files changed, 7 insertions(+), 86 deletions(-) delete mode 100644 src/material/checkbox/checkbox-required-validator.ts diff --git a/src/material/checkbox/checkbox-required-validator.ts b/src/material/checkbox/checkbox-required-validator.ts deleted file mode 100644 index 27aa6de194d7..000000000000 --- a/src/material/checkbox/checkbox-required-validator.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {Directive, forwardRef, Provider} from '@angular/core'; -import {CheckboxRequiredValidator, NG_VALIDATORS} from '@angular/forms'; - -/** - * @deprecated No longer used, `MatCheckbox` implements required validation directly. - * @breaking-change 19.0.0 - */ -export const MAT_CHECKBOX_REQUIRED_VALIDATOR: Provider = { - provide: NG_VALIDATORS, - useExisting: forwardRef(() => MatCheckboxRequiredValidator), - multi: true, -}; - -/** - * Validator for Material checkbox's required attribute in template-driven checkbox. - * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not - * work with `mat-checkbox`. - * - * @deprecated No longer used, `MatCheckbox` implements required validation directly. - * @breaking-change 19.0.0 - */ -@Directive({ - selector: `mat-checkbox[required][formControlName], - mat-checkbox[required][formControl], mat-checkbox[required][ngModel]`, - providers: [MAT_CHECKBOX_REQUIRED_VALIDATOR], -}) -export class MatCheckboxRequiredValidator extends CheckboxRequiredValidator {} diff --git a/src/material/checkbox/checkbox.ts b/src/material/checkbox/checkbox.ts index e3912918f156..dae4ac6777ce 100644 --- a/src/material/checkbox/checkbox.ts +++ b/src/material/checkbox/checkbox.ts @@ -59,16 +59,6 @@ export enum TransitionCheckState { Indeterminate, } -/** - * @deprecated Will stop being exported. - * @breaking-change 19.0.0 - */ -export const MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR: any = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => MatCheckbox), - multi: true, -}; - /** Change event object emitted by checkbox. */ export class MatCheckboxChange { /** The source checkbox of the event. */ @@ -99,7 +89,11 @@ const defaults = MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY(); '[class]': 'color ? "mat-" + color : "mat-accent"', }, providers: [ - MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR, + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => MatCheckbox), + multi: true, + }, { provide: NG_VALIDATORS, useExisting: MatCheckbox, diff --git a/src/material/checkbox/module.ts b/src/material/checkbox/module.ts index 089d8231018a..267266fa6907 100644 --- a/src/material/checkbox/module.ts +++ b/src/material/checkbox/module.ts @@ -9,17 +9,6 @@ import {NgModule} from '@angular/core'; import {MatCommonModule} from '@angular/material/core'; import {MatCheckbox} from './checkbox'; -import {MatCheckboxRequiredValidator} from './checkbox-required-validator'; - -/** - * @deprecated No longer used, `MatCheckbox` implements required validation directly. - * @breaking-change 19.0.0 - */ -@NgModule({ - imports: [MatCheckboxRequiredValidator], - exports: [MatCheckboxRequiredValidator], -}) -export class _MatCheckboxRequiredValidatorModule {} @NgModule({ imports: [MatCheckbox, MatCommonModule], diff --git a/src/material/checkbox/public-api.ts b/src/material/checkbox/public-api.ts index 40d78aec7138..1f86cb582d17 100644 --- a/src/material/checkbox/public-api.ts +++ b/src/material/checkbox/public-api.ts @@ -9,4 +9,3 @@ export * from './checkbox'; export * from './checkbox-config'; export * from './module'; -export * from './checkbox-required-validator'; diff --git a/tools/public_api_guard/material/checkbox.md b/tools/public_api_guard/material/checkbox.md index e717cbd4fea5..9d7d5b6ecc99 100644 --- a/tools/public_api_guard/material/checkbox.md +++ b/tools/public_api_guard/material/checkbox.md @@ -6,33 +6,25 @@ import { AbstractControl } from '@angular/forms'; import { AfterViewInit } from '@angular/core'; -import { CheckboxRequiredValidator } from '@angular/forms'; import { ControlValueAccessor } from '@angular/forms'; import { ElementRef } from '@angular/core'; import { EventEmitter } from '@angular/core'; import { FocusableOption } from '@angular/cdk/a11y'; import * as i0 from '@angular/core'; -import * as i3 from '@angular/material/core'; +import * as i2 from '@angular/material/core'; import { InjectionToken } from '@angular/core'; import { OnChanges } from '@angular/core'; -import { Provider } from '@angular/core'; import { SimpleChanges } from '@angular/core'; import { ThemePalette } from '@angular/material/core'; import { ValidationErrors } from '@angular/forms'; import { Validator } from '@angular/forms'; -// @public @deprecated (undocumented) -export const MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR: any; - // @public export const MAT_CHECKBOX_DEFAULT_OPTIONS: InjectionToken; // @public export function MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY(): MatCheckboxDefaultOptions; -// @public @deprecated (undocumented) -export const MAT_CHECKBOX_REQUIRED_VALIDATOR: Provider; - // @public (undocumented) export class MatCheckbox implements AfterViewInit, OnChanges, ControlValueAccessor, Validator, FocusableOption { constructor(...args: unknown[]); @@ -154,25 +146,7 @@ export class MatCheckboxModule { // (undocumented) static ɵinj: i0.ɵɵInjectorDeclaration; // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration; -} - -// @public @deprecated -export class MatCheckboxRequiredValidator extends CheckboxRequiredValidator { - // (undocumented) - static ɵdir: i0.ɵɵDirectiveDeclaration; - // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration; -} - -// @public @deprecated (undocumented) -export class _MatCheckboxRequiredValidatorModule { - // (undocumented) - static ɵfac: i0.ɵɵFactoryDeclaration<_MatCheckboxRequiredValidatorModule, never>; - // (undocumented) - static ɵinj: i0.ɵɵInjectorDeclaration<_MatCheckboxRequiredValidatorModule>; - // (undocumented) - static ɵmod: i0.ɵɵNgModuleDeclaration<_MatCheckboxRequiredValidatorModule, never, [typeof i1.MatCheckboxRequiredValidator], [typeof i1.MatCheckboxRequiredValidator]>; + static ɵmod: i0.ɵɵNgModuleDeclaration; } // @public From 82e468305dd238451bebdc1de3807cb3ddce5cd0 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:10:13 +0100 Subject: [PATCH 7/8] fix(material/dialog): breaking changes for v20 Removes the deprecated symbols for v20 from the dialog. BREAKING CHANGE: * `MAT_DIALOG_SCROLL_STRATEGY_PROVIDER` has been removed. * `MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY` has been removed. --- src/material/dialog/dialog.ts | 22 ---------------------- tools/public_api_guard/material/dialog.md | 11 ----------- 2 files changed, 33 deletions(-) diff --git a/src/material/dialog/dialog.ts b/src/material/dialog/dialog.ts index 49840489d23a..fa75e3f50aee 100644 --- a/src/material/dialog/dialog.ts +++ b/src/material/dialog/dialog.ts @@ -44,28 +44,6 @@ export const MAT_DIALOG_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrateg }, ); -/** - * @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 - * @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], - useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, -}; - /** * Service to open Material Design modal dialogs. */ diff --git a/tools/public_api_guard/material/dialog.md b/tools/public_api_guard/material/dialog.md index f7b9615ccfef..e3b05054ccaa 100644 --- a/tools/public_api_guard/material/dialog.md +++ b/tools/public_api_guard/material/dialog.md @@ -25,7 +25,6 @@ import { Observable } from 'rxjs'; import { OnChanges } from '@angular/core'; import { OnDestroy } from '@angular/core'; import { OnInit } from '@angular/core'; -import { Overlay } from '@angular/cdk/overlay'; import { ScrollStrategy } from '@angular/cdk/overlay'; import { SimpleChanges } from '@angular/core'; import { Subject } from 'rxjs'; @@ -66,16 +65,6 @@ export const MAT_DIALOG_DEFAULT_OPTIONS: InjectionToken>; // @public export const MAT_DIALOG_SCROLL_STRATEGY: InjectionToken<() => ScrollStrategy>; -// @public @deprecated -export const MAT_DIALOG_SCROLL_STRATEGY_PROVIDER: { - provide: InjectionToken<() => ScrollStrategy>; - deps: (typeof Overlay)[]; - useFactory: typeof MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY; -}; - -// @public @deprecated -export function MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay: Overlay): () => ScrollStrategy; - // @public export class MatDialog implements OnDestroy { constructor(...args: unknown[]); From c27e85214901462b642f2ba3902095e8b76d1d81 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 6 Mar 2025 10:11:12 +0100 Subject: [PATCH 8/8] fix(material/select): breaking changes for v20 Removes the deprecated symbols for v20 from the select. BREAKING CHANGE: * `matSelectAnimations.transformPanelWrap` has been removed. --- src/material/select/select-animations.ts | 34 ----------------------- tools/public_api_guard/material/select.md | 1 - 2 files changed, 35 deletions(-) diff --git a/src/material/select/select-animations.ts b/src/material/select/select-animations.ts index ddc506fdd130..a6ceb0a8c225 100644 --- a/src/material/select/select-animations.ts +++ b/src/material/select/select-animations.ts @@ -16,42 +16,8 @@ * @breaking-change 21.0.0 */ export const matSelectAnimations: { - /** - * @deprecated No longer being used. To be removed. - * @breaking-change 12.0.0 - */ - readonly transformPanelWrap: any; readonly transformPanel: any; } = { - // Represents - // trigger('transformPanelWrap', [ - // transition('* => void', query('@transformPanel', [animateChild()], {optional: true})), - // ]) - - /** - * This animation ensures the select's overlay panel animation (transformPanel) is called when - * closing the select. - * This is needed due to https://github.com/angular/angular/issues/23302 - */ - transformPanelWrap: { - type: 7, - name: 'transformPanelWrap', - definitions: [ - { - type: 1, - expr: '* => void', - animation: { - type: 11, - selector: '@transformPanel', - animation: [{type: 9, options: null}], - options: {optional: true}, - }, - options: null, - }, - ], - options: {}, - }, - // Represents // trigger('transformPanel', [ // state( diff --git a/tools/public_api_guard/material/select.md b/tools/public_api_guard/material/select.md index c2a0c6a362df..fe7b7fd0ac51 100644 --- a/tools/public_api_guard/material/select.md +++ b/tools/public_api_guard/material/select.md @@ -218,7 +218,6 @@ export class MatSelect implements AfterContentInit, OnChanges, OnDestroy, OnInit // @public @deprecated export const matSelectAnimations: { - readonly transformPanelWrap: any; readonly transformPanel: any; };