1
- @use ' sass:map' ;
2
1
@use ' @angular/cdk' ;
3
- @use ' @material/list/evolution-mixins' as mdc-list-mixins ;
4
- @use ' @material/list/evolution-variables' as mdc-list-variables ;
5
- @use ' @material/typography/typography' as mdc-typography ;
6
2
@use ' ../core/tokens/m2/mat/menu' as tokens-mat-menu ;
7
3
@use ' ../core/tokens/token-utils' ;
8
- @use ' ../core/mdc-helpers/mdc-helpers' ;
9
4
@use ' ../core/style/menu-common' ;
10
5
@use ' ../core/style/button-common' ;
6
+ @use ' ../core/style/vendor-prefixes' ;
11
7
12
8
// Prevent rendering mat-menu as it can affect the flex layout.
13
9
mat-menu {
14
10
display : none ;
15
11
}
16
12
17
13
.mat-mdc-menu-content {
18
- @include mdc-list-mixins .list-base ($query : structure);
14
+ margin : 0 ;
15
+ padding : 8px 0 ;
16
+ outline : 0 ;
19
17
20
18
& ,
21
19
.mat-mdc-menu-item .mat-mdc-menu-item-text {
22
- @include mdc-typography .smooth-font ();
20
+ @include vendor-prefixes .smooth-font ();
23
21
flex : 1 ;
24
22
white-space : normal ;
25
23
@@ -78,23 +76,38 @@ mat-menu {
78
76
}
79
77
80
78
.mat-mdc-menu-item {
81
- @include mdc-helpers .disable-mdc-fallback-declarations {
82
- @include mdc-list-mixins .item-base ;
83
- @include token-utils .use-tokens (tokens-mat-menu .$prefix , tokens-mat-menu .get-token-slots ()) {
84
- @include mdc-list-mixins .item-spacing (
85
- var (#{token-utils .get-token-variable (item-leading-spacing )} ),
86
- var (#{token-utils .get-token-variable (item-trailing-spacing )} ),
87
- $query : mdc-helpers .$mdc-base-styles-query
88
- );
89
-
90
- // stylelint-disable-next-line selector-class-pattern
91
- & :has (.material-icons , mat-icon , [matButtonIcon ]) {
92
- @include mdc-list-mixins .item-spacing (
93
- var (#{token-utils .get-token-variable (item-with-icon-leading-spacing )} ),
94
- var (#{token-utils .get-token-variable (item-with-icon-trailing-spacing )} ),
95
- $query : mdc-helpers .$mdc-base-styles-query
96
- );
97
- }
79
+ display : flex ;
80
+ position : relative ;
81
+ align-items : center ;
82
+ justify-content : flex-start ;
83
+ overflow : hidden ;
84
+ padding : 0 ;
85
+
86
+ @include token-utils .use-tokens (tokens-mat-menu .$prefix , tokens-mat-menu .get-token-slots ()) {
87
+ $icons-selector : ' .material-icons, mat-icon, [matButtonIcon]' ;
88
+ $leading-padding : var (#{token-utils .get-token-variable (item-leading-spacing )} );
89
+ $trailing-padding : var (#{token-utils .get-token-variable (item-trailing-spacing )} );
90
+ $with-icon-leading-padding :
91
+ var (#{token-utils .get-token-variable (item-with-icon-leading-spacing )} );
92
+ $with-icon-trailing-padding :
93
+ var (#{token-utils .get-token-variable (item-with-icon-trailing-spacing )} );
94
+
95
+ padding-left : $leading-padding ;
96
+ padding-right : $trailing-padding ;
97
+
98
+ [dir = ' rtl' ] & {
99
+ padding-right : $leading-padding ;
100
+ padding-left : $trailing-padding ;
101
+ }
102
+
103
+ & :has (#{$icons-selector }) {
104
+ padding-left : $with-icon-leading-padding ;
105
+ padding-right : $with-icon-trailing-padding ;
106
+ }
107
+
108
+ [dir = ' rtl' ] & :has (#{$icons-selector }) {
109
+ padding-right : $with-icon-leading-padding ;
110
+ padding-left : $with-icon-trailing-padding ;
98
111
}
99
112
}
100
113
@@ -110,13 +123,7 @@ mat-menu {
110
123
background : none ;
111
124
text-decoration : none ;
112
125
margin : 0 ; // Resolves an issue where buttons have an extra 2px margin on Safari.
113
- align-items : center ;
114
-
115
- // Set the `min-height` here ourselves, instead of going through
116
- // the `mdc-list-one-line-item-density` mixin, because it sets a `height`
117
- // which doesn't work well with multi-line items.
118
- $height-config : map .get (mdc-list-variables .$one-line-item-density-config , height );
119
- min-height : map .get ($height-config , default );
126
+ min-height : 48px ;
120
127
121
128
@include token-utils .use-tokens (tokens-mat-menu .$prefix , tokens-mat-menu .get-token-slots ()) {
122
129
// The class selector isn't specific enough to overide the link pseudo selectors so we need
@@ -134,10 +141,7 @@ mat-menu {
134
141
135
142
& [disabled ] {
136
143
cursor : default ;
137
-
138
- // This is the same as `mdc-list-mixins.list-disabled-opacity` which
139
- // we can't use directly, because it comes with some selectors.
140
- opacity : mdc-list-variables .$content-disabled-opacity ;
144
+ opacity : 0.38 ;
141
145
142
146
// The browser prevents clicks on disabled buttons from propagating which prevents the menu
143
147
// from closing, but clicks on child nodes still propagate which is inconsistent (see #16694).
@@ -154,6 +158,11 @@ mat-menu {
154
158
}
155
159
}
156
160
161
+ // Inherited from MDC and necessary for some internal tests.
162
+ & :focus {
163
+ outline : 0 ;
164
+ }
165
+
157
166
.mat-icon {
158
167
flex-shrink : 0 ;
159
168
@include token-utils .use-tokens (tokens-mat-menu .$prefix , tokens-mat-menu .get-token-slots ()) {
0 commit comments