Skip to content

Commit a1e8e40

Browse files
authored
fix(material-experimental/mdc-menu): align ripple timings with MDC (#23015)
Aligns the timings for the MDC-based menu item with MDC.
1 parent ca02022 commit a1e8e40

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

src/material-experimental/mdc-menu/BUILD.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ ng_module(
2929
"@npm//@angular/animations",
3030
"@npm//@angular/common",
3131
"@npm//@angular/core",
32+
"@npm//@material/ripple",
3233
],
3334
)
3435

@@ -77,8 +78,12 @@ ng_test_library(
7778

7879
ng_web_test_suite(
7980
name = "unit_tests",
81+
static_files = [
82+
"@npm//:node_modules/@material/ripple/dist/mdc.ripple.js",
83+
],
8084
deps = [
8185
":menu_tests_lib",
86+
"//src/material-experimental:mdc_require_config.js",
8287
],
8388
)
8489

src/material-experimental/mdc-menu/menu-item.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
<span class="mdc-list-item__primary-text"><ng-content></ng-content></span>
33
<div class="mat-mdc-menu-ripple" matRipple
44
[matRippleDisabled]="disableRipple || disabled"
5-
[matRippleTrigger]="_getHostElement()">
5+
[matRippleTrigger]="_getHostElement()"
6+
[matRippleAnimation]="(disableRipple || disabled || _noopAnimations) ? {} : _rippleAnimation">
67
</div>
78
<svg
89
*ngIf="_triggersSubmenu"

src/material-experimental/mdc-menu/menu-item.ts

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,24 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Component, ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';
10-
import {MatMenuItem as BaseMatMenuItem} from '@angular/material/menu';
9+
import {
10+
Component,
11+
ChangeDetectionStrategy,
12+
ViewEncapsulation,
13+
Inject,
14+
ElementRef,
15+
Optional,
16+
} from '@angular/core';
17+
import {
18+
MAT_RIPPLE_GLOBAL_OPTIONS,
19+
RippleAnimationConfig,
20+
RippleGlobalOptions,
21+
} from '@angular/material-experimental/mdc-core';
22+
import {MatMenuItem as BaseMatMenuItem, MatMenuPanel, MAT_MENU_PANEL} from '@angular/material/menu';
23+
import {ANIMATION_MODULE_TYPE} from '@angular/platform-browser/animations';
24+
import {FocusMonitor} from '@angular/cdk/a11y';
25+
import {DOCUMENT} from '@angular/common';
26+
import {numbers} from '@material/ripple';
1127

1228
/**
1329
* Single item inside of a `mat-menu`. Provides the menu item styling and accessibility treatment.
@@ -37,4 +53,22 @@ import {MatMenuItem as BaseMatMenuItem} from '@angular/material/menu';
3753
]
3854
})
3955
export class MatMenuItem extends BaseMatMenuItem {
56+
_rippleAnimation: RippleAnimationConfig;
57+
_noopAnimations: boolean;
58+
59+
constructor(elementRef: ElementRef<HTMLElement>,
60+
@Inject(DOCUMENT) document?: any,
61+
focusMonitor?: FocusMonitor,
62+
@Inject(MAT_MENU_PANEL) @Optional() parentMenu?: MatMenuPanel<unknown>,
63+
@Optional() @Inject(MAT_RIPPLE_GLOBAL_OPTIONS)
64+
globalRippleOptions?: RippleGlobalOptions,
65+
@Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string) {
66+
super(elementRef, document, focusMonitor, parentMenu);
67+
68+
this._noopAnimations = animationMode === 'NoopAnimations';
69+
this._rippleAnimation = globalRippleOptions?.animation || {
70+
enterDuration: numbers.DEACTIVATION_TIMEOUT_MS,
71+
exitDuration: numbers.FG_DEACTIVATION_MS
72+
};
73+
}
4074
}

src/material-experimental/mdc-menu/testing/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ ng_test_library(
2727

2828
ng_web_test_suite(
2929
name = "unit_tests",
30+
static_files = [
31+
"@npm//:node_modules/@material/ripple/dist/mdc.ripple.js",
32+
],
3033
deps = [
3134
":unit_tests_lib",
3235
"//src/material-experimental:mdc_require_config.js",

0 commit comments

Comments
 (0)