Skip to content

refactor(material/menu): simplify structural styles #29267

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 17, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 44 additions & 35 deletions src/material/menu/menu.scss
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
@use 'sass:map';
@use '@angular/cdk';
@use '@material/list/evolution-mixins' as mdc-list-mixins;
@use '@material/list/evolution-variables' as mdc-list-variables;
@use '@material/typography/typography' as mdc-typography;
@use '../core/tokens/m2/mat/menu' as tokens-mat-menu;
@use '../core/tokens/token-utils';
@use '../core/mdc-helpers/mdc-helpers';
@use '../core/style/menu-common';
@use '../core/style/button-common';
@use '../core/style/vendor-prefixes';

// Prevent rendering mat-menu as it can affect the flex layout.
mat-menu {
display: none;
}

.mat-mdc-menu-content {
@include mdc-list-mixins.list-base($query: structure);
margin: 0;
padding: 8px 0;
outline: 0;

&,
.mat-mdc-menu-item .mat-mdc-menu-item-text {
@include mdc-typography.smooth-font();
@include vendor-prefixes.smooth-font();
flex: 1;
white-space: normal;

Expand Down Expand Up @@ -78,23 +76,38 @@ mat-menu {
}

.mat-mdc-menu-item {
@include mdc-helpers.disable-mdc-fallback-declarations {
@include mdc-list-mixins.item-base;
@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
@include mdc-list-mixins.item-spacing(
var(#{token-utils.get-token-variable(item-leading-spacing)}),
var(#{token-utils.get-token-variable(item-trailing-spacing)}),
$query: mdc-helpers.$mdc-base-styles-query
);

// stylelint-disable-next-line selector-class-pattern
&:has(.material-icons, mat-icon, [matButtonIcon]) {
@include mdc-list-mixins.item-spacing(
var(#{token-utils.get-token-variable(item-with-icon-leading-spacing)}),
var(#{token-utils.get-token-variable(item-with-icon-trailing-spacing)}),
$query: mdc-helpers.$mdc-base-styles-query
);
}
display: flex;
position: relative;
align-items: center;
justify-content: flex-start;
overflow: hidden;
padding: 0;

@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
$icons-selector: '.material-icons, mat-icon, [matButtonIcon]';
$leading-padding: var(#{token-utils.get-token-variable(item-leading-spacing)});
$trailing-padding: var(#{token-utils.get-token-variable(item-trailing-spacing)});
$with-icon-leading-padding:
var(#{token-utils.get-token-variable(item-with-icon-leading-spacing)});
$with-icon-trailing-padding:
var(#{token-utils.get-token-variable(item-with-icon-trailing-spacing)});

padding-left: $leading-padding;
padding-right: $trailing-padding;

[dir='rtl'] & {
padding-right: $leading-padding;
padding-left: $trailing-padding;
}

&:has(#{$icons-selector}) {
padding-left: $with-icon-leading-padding;
padding-right: $with-icon-trailing-padding;
}

[dir='rtl'] &:has(#{$icons-selector}) {
padding-right: $with-icon-leading-padding;
padding-left: $with-icon-trailing-padding;
}
}

Expand All @@ -110,13 +123,7 @@ mat-menu {
background: none;
text-decoration: none;
margin: 0; // Resolves an issue where buttons have an extra 2px margin on Safari.
align-items: center;

// Set the `min-height` here ourselves, instead of going through
// the `mdc-list-one-line-item-density` mixin, because it sets a `height`
// which doesn't work well with multi-line items.
$height-config: map.get(mdc-list-variables.$one-line-item-density-config, height);
min-height: map.get($height-config, default);
min-height: 48px;

@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
// The class selector isn't specific enough to overide the link pseudo selectors so we need
Expand All @@ -134,10 +141,7 @@ mat-menu {

&[disabled] {
cursor: default;

// This is the same as `mdc-list-mixins.list-disabled-opacity` which
// we can't use directly, because it comes with some selectors.
opacity: mdc-list-variables.$content-disabled-opacity;
opacity: 0.38;

// The browser prevents clicks on disabled buttons from propagating which prevents the menu
// from closing, but clicks on child nodes still propagate which is inconsistent (see #16694).
Expand All @@ -154,6 +158,11 @@ mat-menu {
}
}

// Inherited from MDC and necessary for some internal tests.
&:focus {
outline: 0;
}

.mat-icon {
flex-shrink: 0;
@include token-utils.use-tokens(tokens-mat-menu.$prefix, tokens-mat-menu.get-token-slots()) {
Expand Down
Loading