Skip to content

Commit b0e39a8

Browse files
authored
refactor(material/tooltip): simplify structural styles (angular#29300)
Simplifies the structural styles of `MatTooltip` to make them smaller and easier to maintain.
1 parent e92e9cc commit b0e39a8

File tree

3 files changed

+76
-37
lines changed

3 files changed

+76
-37
lines changed

src/material/tooltip/_tooltip-theme.scss

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
@use 'sass:map';
2-
@use '@material/tooltip/plain-tooltip-theme' as mdc-plain-tooltip-theme;
31
@use '../core/style/sass-utils';
42
@use '../core/theming/theming';
53
@use '../core/theming/inspection';
@@ -15,7 +13,10 @@
1513
@else {
1614
// Add default values for tokens not related to color, typography, or density.
1715
@include sass-utils.current-selector-or-root() {
18-
@include mdc-plain-tooltip-theme.theme(tokens-mdc-plain-tooltip.get-unthemable-tokens());
16+
@include token-utils.create-token-values(
17+
tokens-mdc-plain-tooltip.$prefix,
18+
tokens-mdc-plain-tooltip.get-unthemable-tokens()
19+
);
1920
}
2021
}
2122
}
@@ -25,11 +26,11 @@
2526
@include _theme-from-tokens(inspection.get-theme-tokens($theme, color));
2627
}
2728
@else {
28-
$mdc-tooltip-color-tokens: tokens-mdc-plain-tooltip.get-color-tokens($theme);
29-
30-
// Add values for MDC tooltip tokens.
3129
@include sass-utils.current-selector-or-root() {
32-
@include mdc-plain-tooltip-theme.theme($mdc-tooltip-color-tokens);
30+
@include token-utils.create-token-values(
31+
tokens-mdc-plain-tooltip.$prefix,
32+
tokens-mdc-plain-tooltip.get-color-tokens($theme)
33+
);
3334
}
3435
}
3536
}
@@ -39,11 +40,11 @@
3940
@include _theme-from-tokens(inspection.get-theme-tokens($theme, typography));
4041
}
4142
@else {
42-
$mdc-tooltip-typography-tokens: tokens-mdc-plain-tooltip.get-typography-tokens($theme);
43-
44-
// Add values for MDC tooltip tokens.
4543
@include sass-utils.current-selector-or-root() {
46-
@include mdc-plain-tooltip-theme.theme($mdc-tooltip-typography-tokens);
44+
@include token-utils.create-token-values(
45+
tokens-mdc-plain-tooltip.$prefix,
46+
tokens-mdc-plain-tooltip.get-typography-tokens($theme)
47+
);
4748
}
4849
}
4950
}
@@ -53,11 +54,11 @@
5354
@include _theme-from-tokens(inspection.get-theme-tokens($theme, density));
5455
}
5556
@else {
56-
$mdc-tooltip-density-tokens: tokens-mdc-plain-tooltip.get-density-tokens($theme);
57-
58-
// Add values for MDC tooltip tokens.
5957
@include sass-utils.current-selector-or-root() {
60-
@include mdc-plain-tooltip-theme.theme($mdc-tooltip-density-tokens);
58+
@include token-utils.create-token-values(
59+
tokens-mdc-plain-tooltip.$prefix,
60+
tokens-mdc-plain-tooltip.get-density-tokens($theme)
61+
);
6162
}
6263
}
6364
}
@@ -93,6 +94,7 @@
9394
@include validation.selector-defined(
9495
'Calls to Angular Material theme mixins with an M3 theme must be wrapped in a selector');
9596
@if $tokens != () {
96-
@include mdc-plain-tooltip-theme.theme(map.get($tokens, tokens-mdc-plain-tooltip.$prefix));
97+
$tokens: token-utils.get-tokens-for($tokens, tokens-mdc-plain-tooltip.$prefix);
98+
@include token-utils.create-token-values(tokens-mdc-plain-tooltip.$prefix, $tokens);
9799
}
98100
}

src/material/tooltip/tooltip.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<div
22
#tooltip
3-
class="mdc-tooltip mdc-tooltip--shown mat-mdc-tooltip"
3+
class="mdc-tooltip mat-mdc-tooltip"
44
[ngClass]="tooltipClass"
55
(animationend)="_handleAnimationEnd($event)"
66
[class.mdc-tooltip--multiline]="_isMultiline">
7-
<div class="mdc-tooltip__surface mdc-tooltip__surface-animation">{{message}}</div>
7+
<div class="mat-mdc-tooltip-surface mdc-tooltip__surface">{{message}}</div>
88
</div>

src/material/tooltip/tooltip.scss

Lines changed: 56 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,11 @@
1-
@use '@material/theme/custom-properties' as mdc-custom-properties;
2-
@use '@material/tooltip/tooltip' as mdc-tooltip;
3-
@use '@material/tooltip/plain-tooltip-theme' as mdc-plain-tooltip-theme;
4-
@use '../core/tokens/m2/mdc/plain-tooltip' as m2-mdc-plain-tooltip;
5-
6-
@include mdc-custom-properties.configure($emit-fallback-values: false,
7-
$emit-fallback-vars: false) {
8-
$mdc-tooltip-token-slots: m2-mdc-plain-tooltip.get-token-slots();
9-
10-
// Add the MDC tooltip static styles.
11-
@include mdc-tooltip.static-styles();
12-
13-
.mat-mdc-tooltip {
14-
// Add the official slots for the MDC tooltip.
15-
@include mdc-plain-tooltip-theme.theme-styles($mdc-tooltip-token-slots);
16-
}
17-
}
1+
@use '../core/tokens/m2/mdc/plain-tooltip' as tokens-mdc-plain-tooltip;
2+
@use '../core/tokens/token-utils';
183

194
.mat-mdc-tooltip {
205
// We don't use MDC's positioning so this has to be relative.
216
position: relative;
227
transform: scale(0);
8+
display: inline-flex;
239

2410
// Increases the area of the tooltip so the user's pointer can go from the trigger directly to it.
2511
&::before {
@@ -59,13 +45,64 @@
5945
}
6046
}
6147

48+
.mat-mdc-tooltip-surface {
49+
word-break: normal;
50+
overflow-wrap: anywhere;
51+
padding: 4px 8px;
52+
min-width: 40px;
53+
max-width: 200px;
54+
min-height: 24px;
55+
max-height: 40vh;
56+
box-sizing: border-box;
57+
overflow: hidden;
58+
text-align: center;
59+
60+
// TODO(crisbeto): these styles aren't necessary, but they were present in
61+
// MDC and removing them is likely to cause screenshot differences.
62+
will-change: transform, opacity;
63+
64+
@include token-utils.use-tokens(
65+
tokens-mdc-plain-tooltip.$prefix,
66+
tokens-mdc-plain-tooltip.get-token-slots()
67+
) {
68+
@include token-utils.create-token-slot(background-color, container-color);
69+
@include token-utils.create-token-slot(color, supporting-text-color);
70+
@include token-utils.create-token-slot(border-radius, container-shape);
71+
@include token-utils.create-token-slot(font-family, supporting-text-font);
72+
@include token-utils.create-token-slot(font-size, supporting-text-size);
73+
@include token-utils.create-token-slot(font-weight, supporting-text-weight);
74+
@include token-utils.create-token-slot(line-height, supporting-text-line-height);
75+
@include token-utils.create-token-slot(letter-spacing, supporting-text-tracking);
76+
}
77+
78+
// Renders an outline in high contrast mode.
79+
&::before {
80+
position: absolute;
81+
box-sizing: border-box;
82+
width: 100%;
83+
height: 100%;
84+
top: 0;
85+
left: 0;
86+
border: 1px solid transparent;
87+
border-radius: inherit;
88+
content: '';
89+
pointer-events: none;
90+
}
91+
92+
.mdc-tooltip--multiline & {
93+
text-align: left;
94+
}
95+
96+
[dir='rtl'] .mdc-tooltip--multiline & {
97+
text-align: right;
98+
}
99+
}
100+
62101
// We need the additional specificity here, because it can be overridden by `.cdk-overlay-panel`.
63102
.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive {
64103
pointer-events: none;
65104
}
66105

67-
// TODO(crisbeto): we may be able to use MDC directly for these animations.
68-
69106
@keyframes mat-mdc-tooltip-show {
70107
0% {
71108
opacity: 0;

0 commit comments

Comments
 (0)