@@ -47,7 +47,6 @@ import {MenuPositionX, MenuPositionY} from './menu-positions';
47
47
import { throwMatMenuInvalidPositionX , throwMatMenuInvalidPositionY } from './menu-errors' ;
48
48
import { MatMenuContent , MAT_MENU_CONTENT } from './menu-content' ;
49
49
import { matMenuAnimations } from './menu-animations' ;
50
- import { NgClass } from '@angular/common' ;
51
50
52
51
let menuPanelUid = 0 ;
53
52
@@ -109,7 +108,6 @@ export function MAT_MENU_DEFAULT_OPTIONS_FACTORY(): MatMenuDefaultOptions {
109
108
animations : [ matMenuAnimations . transformMenu , matMenuAnimations . fadeInItems ] ,
110
109
providers : [ { provide : MAT_MENU_PANEL , useExisting : MatMenu } ] ,
111
110
standalone : true ,
112
- imports : [ NgClass ] ,
113
111
} )
114
112
export class MatMenu implements AfterContentInit , MatMenuPanel < MatMenuItem > , OnInit , OnDestroy {
115
113
private _keyManager : FocusKeyManager < MatMenuItem > ;
@@ -126,7 +124,7 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
126
124
/** Only the direct descendant menu items. */
127
125
_directDescendantItems = new QueryList < MatMenuItem > ( ) ;
128
126
129
- /** Config object to be passed into the menu's ngClass */
127
+ /** Classes to be applied to the menu panel. */
130
128
_classList : { [ key : string ] : boolean } = { } ;
131
129
132
130
/** Current state of the panel animation. */
@@ -221,22 +219,25 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
221
219
@Input ( 'class' )
222
220
set panelClass ( classes : string ) {
223
221
const previousPanelClass = this . _previousPanelClass ;
222
+ const newClassList = { ...this . _classList } ;
224
223
225
224
if ( previousPanelClass && previousPanelClass . length ) {
226
225
previousPanelClass . split ( ' ' ) . forEach ( ( className : string ) => {
227
- this . _classList [ className ] = false ;
226
+ newClassList [ className ] = false ;
228
227
} ) ;
229
228
}
230
229
231
230
this . _previousPanelClass = classes ;
232
231
233
232
if ( classes && classes . length ) {
234
233
classes . split ( ' ' ) . forEach ( ( className : string ) => {
235
- this . _classList [ className ] = true ;
234
+ newClassList [ className ] = true ;
236
235
} ) ;
237
236
238
237
this . _elementRef . nativeElement . className = '' ;
239
238
}
239
+
240
+ this . _classList = newClassList ;
240
241
}
241
242
private _previousPanelClass : string ;
242
243
@@ -465,12 +466,15 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
465
466
} ) ;
466
467
467
468
if ( ! customElevation || customElevation === this . _previousElevation ) {
469
+ const newClassList = { ...this . _classList } ;
470
+
468
471
if ( this . _previousElevation ) {
469
- this . _classList [ this . _previousElevation ] = false ;
472
+ newClassList [ this . _previousElevation ] = false ;
470
473
}
471
474
472
- this . _classList [ newElevation ] = true ;
475
+ newClassList [ newElevation ] = true ;
473
476
this . _previousElevation = newElevation ;
477
+ this . _classList = newClassList ;
474
478
}
475
479
}
476
480
@@ -482,11 +486,13 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
482
486
* @docs -private
483
487
*/
484
488
setPositionClasses ( posX : MenuPositionX = this . xPosition , posY : MenuPositionY = this . yPosition ) {
485
- const classes = this . _classList ;
486
- classes [ 'mat-menu-before' ] = posX === 'before' ;
487
- classes [ 'mat-menu-after' ] = posX === 'after' ;
488
- classes [ 'mat-menu-above' ] = posY === 'above' ;
489
- classes [ 'mat-menu-below' ] = posY === 'below' ;
489
+ this . _classList = {
490
+ ...this . _classList ,
491
+ [ 'mat-menu-before' ] : posX === 'before' ,
492
+ [ 'mat-menu-after' ] : posX === 'after' ,
493
+ [ 'mat-menu-above' ] : posY === 'above' ,
494
+ [ 'mat-menu-below' ] : posY === 'below' ,
495
+ } ;
490
496
491
497
// @breaking -change 15.0.0 Remove null check for `_changeDetectorRef`.
492
498
this . _changeDetectorRef ?. markForCheck ( ) ;
0 commit comments