@@ -51,7 +51,6 @@ import {MenuPositionX, MenuPositionY} from './menu-positions';
51
51
import { throwMatMenuInvalidPositionX , throwMatMenuInvalidPositionY } from './menu-errors' ;
52
52
import { MatMenuContent , MAT_MENU_CONTENT } from './menu-content' ;
53
53
import { matMenuAnimations } from './menu-animations' ;
54
- import { NgClass } from '@angular/common' ;
55
54
56
55
let menuPanelUid = 0 ;
57
56
@@ -113,7 +112,6 @@ export function MAT_MENU_DEFAULT_OPTIONS_FACTORY(): MatMenuDefaultOptions {
113
112
animations : [ matMenuAnimations . transformMenu , matMenuAnimations . fadeInItems ] ,
114
113
providers : [ { provide : MAT_MENU_PANEL , useExisting : MatMenu } ] ,
115
114
standalone : true ,
116
- imports : [ NgClass ] ,
117
115
} )
118
116
export class MatMenu implements AfterContentInit , MatMenuPanel < MatMenuItem > , OnInit , OnDestroy {
119
117
private _keyManager : FocusKeyManager < MatMenuItem > ;
@@ -130,7 +128,7 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
130
128
/** Only the direct descendant menu items. */
131
129
_directDescendantItems = new QueryList < MatMenuItem > ( ) ;
132
130
133
- /** Config object to be passed into the menu's ngClass */
131
+ /** Classes to be applied to the menu panel. */
134
132
_classList : { [ key : string ] : boolean } = { } ;
135
133
136
134
/** Current state of the panel animation. */
@@ -225,22 +223,25 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
225
223
@Input ( 'class' )
226
224
set panelClass ( classes : string ) {
227
225
const previousPanelClass = this . _previousPanelClass ;
226
+ const newClassList = { ...this . _classList } ;
228
227
229
228
if ( previousPanelClass && previousPanelClass . length ) {
230
229
previousPanelClass . split ( ' ' ) . forEach ( ( className : string ) => {
231
- this . _classList [ className ] = false ;
230
+ newClassList [ className ] = false ;
232
231
} ) ;
233
232
}
234
233
235
234
this . _previousPanelClass = classes ;
236
235
237
236
if ( classes && classes . length ) {
238
237
classes . split ( ' ' ) . forEach ( ( className : string ) => {
239
- this . _classList [ className ] = true ;
238
+ newClassList [ className ] = true ;
240
239
} ) ;
241
240
242
241
this . _elementRef . nativeElement . className = '' ;
243
242
}
243
+
244
+ this . _classList = newClassList ;
244
245
}
245
246
private _previousPanelClass : string ;
246
247
@@ -478,12 +479,15 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
478
479
} ) ;
479
480
480
481
if ( ! customElevation || customElevation === this . _previousElevation ) {
482
+ const newClassList = { ...this . _classList } ;
483
+
481
484
if ( this . _previousElevation ) {
482
- this . _classList [ this . _previousElevation ] = false ;
485
+ newClassList [ this . _previousElevation ] = false ;
483
486
}
484
487
485
- this . _classList [ newElevation ] = true ;
488
+ newClassList [ newElevation ] = true ;
486
489
this . _previousElevation = newElevation ;
490
+ this . _classList = newClassList ;
487
491
}
488
492
}
489
493
@@ -495,11 +499,13 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
495
499
* @docs -private
496
500
*/
497
501
setPositionClasses ( posX : MenuPositionX = this . xPosition , posY : MenuPositionY = this . yPosition ) {
498
- const classes = this . _classList ;
499
- classes [ 'mat-menu-before' ] = posX === 'before' ;
500
- classes [ 'mat-menu-after' ] = posX === 'after' ;
501
- classes [ 'mat-menu-above' ] = posY === 'above' ;
502
- classes [ 'mat-menu-below' ] = posY === 'below' ;
502
+ this . _classList = {
503
+ ...this . _classList ,
504
+ [ 'mat-menu-before' ] : posX === 'before' ,
505
+ [ 'mat-menu-after' ] : posX === 'after' ,
506
+ [ 'mat-menu-above' ] : posY === 'above' ,
507
+ [ 'mat-menu-below' ] : posY === 'below' ,
508
+ } ;
503
509
504
510
// @breaking -change 15.0.0 Remove null check for `_changeDetectorRef`.
505
511
this . _changeDetectorRef ?. markForCheck ( ) ;
0 commit comments