1
- // This contains all of the styles for the badge
2
- // rather than just the color/theme because of
3
- // no style sheet support for directives.
4
1
@use ' sass:color' ;
5
2
@use ' sass:map' ;
6
- @use ' sass:meta' ;
7
3
@use ' sass:math' ;
8
4
@use ' @angular/cdk' ;
9
5
10
6
@use ' ../core/theming/theming' ;
11
7
@use ' ../core/typography/typography' ;
12
- @use ' ../core/typography/typography-utils' ;
8
+ @use ' ../core/tokens/m2/mat/badge' as tokens-mat-badge ;
9
+ @use ' ../core/tokens/token-utils' ;
10
+ @use ' ../core/style/sass-utils' ;
13
11
12
+ // TODO(crisbeto): some of these variables aren't used anymore and should be deleted.
14
13
$font-size : 12px ;
15
14
$font-weight : 600 ;
16
15
$default-size : 22px !default ;
17
16
$small-size : $default-size - 6 ;
18
17
$large-size : $default-size + 6 ;
19
18
$_badge-structure-emitted : false !default ;
20
19
20
+ // Internally there are some builds that throw an error if they can't figure out the values
21
+ // of CSS variables during compliation. This flag temporarily enables fallbacks for these builds.
22
+ // Eventually we should clean them up.
23
+ $_emit-fallback-vars : true;
24
+
21
25
// Mixin for building offset given different sizes
22
- @mixin _badge-size ($size ) {
26
+ @mixin _badge-size ($size , $font-size-token ) {
23
27
// This mixin isn't used in the context of a theme so we can disable the ampersand check.
24
28
// stylelint-disable material/no-ampersand-beyond-selector-start
25
29
.mat-badge-content {
26
30
width : $size ;
27
31
height : $size ;
28
32
line-height : $size ;
29
- }
30
33
31
- & .mat-badge-above {
32
- .mat-badge-content {
33
- top : math .div (- $size , 2 );
34
+ @if ($font-size-token ) {
35
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix ,
36
+ tokens-mat-badge .get-token-slots ()) {
37
+ @include token-utils .create-token-slot (font-size , $font-size-token , $_emit-fallback-vars );
38
+ }
34
39
}
35
40
}
36
41
37
- & .mat-badge-below {
38
- .mat-badge-content {
39
- bottom : math .div (- $size , 2 );
40
- }
42
+ & .mat-badge-above .mat-badge-content {
43
+ top : math .div (- $size , 2 );
41
44
}
42
45
43
- & .mat-badge-before {
44
- .mat-badge-content {
45
- left : - $size ;
46
- }
46
+ & .mat-badge-below .mat-badge-content {
47
+ bottom : math .div (- $size , 2 );
47
48
}
48
49
49
- [dir = ' rtl' ] & .mat-badge-before {
50
- .mat-badge-content {
51
- left : auto ;
52
- right : - $size ;
53
- }
50
+ & .mat-badge-before .mat-badge-content {
51
+ left : - $size ;
54
52
}
55
53
56
- & .mat-badge-after {
57
- .mat-badge-content {
58
- right : - $size ;
59
- }
54
+ [dir = ' rtl' ] & .mat-badge-before .mat-badge-content {
55
+ left : auto ;
56
+ right : - $size ;
60
57
}
61
58
62
- [dir = ' rtl' ] & .mat-badge-after {
63
- .mat-badge-content {
64
- right : auto ;
65
- left : - $size ;
66
- }
59
+ & .mat-badge-after .mat-badge-content {
60
+ right : - $size ;
61
+ }
62
+
63
+ [dir = ' rtl' ] & .mat-badge-after .mat-badge-content {
64
+ right : auto ;
65
+ left : - $size ;
67
66
}
68
67
69
68
& .mat-badge-overlap {
70
- & .mat-badge-before {
71
- .mat-badge-content {
72
- left : math .div (- $size , 2 );
73
- }
69
+ & .mat-badge-before .mat-badge-content {
70
+ left : math .div (- $size , 2 );
74
71
}
75
72
76
- [dir = ' rtl' ] & .mat-badge-before {
77
- .mat-badge-content {
78
- left : auto ;
79
- right : math .div (- $size , 2 );
80
- }
73
+ [dir = ' rtl' ] & .mat-badge-before .mat-badge-content {
74
+ left : auto ;
75
+ right : math .div (- $size , 2 );
81
76
}
82
77
83
- & .mat-badge-after {
84
- .mat-badge-content {
85
- right : math .div (- $size , 2 );
86
- }
78
+ & .mat-badge-after .mat-badge-content {
79
+ right : math .div (- $size , 2 );
87
80
}
88
81
89
- [dir = ' rtl' ] & .mat-badge-after {
90
- .mat-badge-content {
91
- right : auto ;
92
- left : math .div (- $size , 2 );
93
- }
82
+ [dir = ' rtl' ] & .mat-badge-after .mat-badge-content {
83
+ right : auto ;
84
+ left : math .div (- $size , 2 );
94
85
}
95
86
}
96
87
// stylelint-enable
@@ -101,19 +92,13 @@ $_badge-structure-emitted: false !default;
101
92
@mixin _badge-structure {
102
93
.mat-badge {
103
94
position : relative ;
104
- }
105
95
106
- // The badge should make sure its host is overflow visible so that the badge content
107
- // can be rendered outside of the element. Some components such as <mat-icon> explicitly
108
- // style `overflow: hidden` so this requires extra specificity so that it does not
109
- // depend on style load order.
110
- .mat-badge.mat-badge {
111
- overflow : visible ;
112
- }
113
-
114
- .mat-badge-hidden {
115
- .mat-badge-content {
116
- display : none ;
96
+ // The badge should make sure its host is overflow visible so that the badge content
97
+ // can be rendered outside of the element. Some components such as <mat-icon> explicitly
98
+ // style `overflow: hidden` so this requires extra specificity so that it does not
99
+ // depend on style load order.
100
+ & .mat-badge {
101
+ overflow : visible ;
117
102
}
118
103
}
119
104
@@ -128,6 +113,30 @@ $_badge-structure-emitted: false !default;
128
113
white-space : nowrap ;
129
114
text-overflow : ellipsis ;
130
115
pointer-events : none ;
116
+
117
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix , tokens-mat-badge .get-token-slots ()) {
118
+ @include token-utils .create-token-slot (background-color , background-color );
119
+ @include token-utils .create-token-slot (color , text- color);
120
+ @include token-utils .create-token-slot (font-family , text- font, $_emit-fallback-vars );
121
+ @include token-utils .create-token-slot (font-size , text- size, $_emit-fallback-vars );
122
+ @include token-utils .create-token-slot (font-weight , text- weight, $_emit-fallback-vars );
123
+ }
124
+
125
+ @include cdk .high-contrast (active , off) {
126
+ outline : solid 1px ;
127
+ border-radius : 0 ;
128
+ }
129
+ }
130
+
131
+ .mat-badge-disabled .mat-badge-content {
132
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix , tokens-mat-badge .get-token-slots ()) {
133
+ @include token-utils .create-token-slot (background-color , disabled- state- background- color);
134
+ @include token-utils .create-token-slot (color , disabled- state- text- color);
135
+ }
136
+ }
137
+
138
+ .mat-badge-hidden .mat-badge-content {
139
+ display : none ;
131
140
}
132
141
133
142
.ng-animate-disabled .mat-badge-content ,
@@ -143,89 +152,46 @@ $_badge-structure-emitted: false !default;
143
152
}
144
153
145
154
.mat-badge-small {
146
- @include _badge-size ($small-size );
155
+ @include _badge-size ($small-size , small - size - text - size );
147
156
}
148
157
149
158
.mat-badge-medium {
150
- @include _badge-size ($default-size );
159
+ @include _badge-size ($default-size , null );
151
160
}
152
161
153
162
.mat-badge-large {
154
- @include _badge-size ($large-size );
163
+ @include _badge-size ($large-size , large - size - text - size );
155
164
}
156
165
}
157
166
158
167
@mixin color ($config-or-theme ) {
159
168
$config : theming .get-color-config ($config-or-theme );
160
169
$accent : map .get ($config , accent );
161
170
$warn : map .get ($config , warn );
162
- $primary : map .get ($config , primary );
163
- $background : map .get ($config , background );
164
- $foreground : map .get ($config , foreground );
165
171
166
- .mat-badge-content {
167
- color : theming .get-color-from-palette ($primary , default-contrast );
168
- background : theming .get-color-from-palette ($primary );
169
-
170
- @include cdk .high-contrast (active , off) {
171
- outline : solid 1px ;
172
- border-radius : 0 ;
173
- }
172
+ @include sass-utils .current-selector-or-root () {
173
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
174
+ tokens-mat-badge .get-color-tokens ($config ));
174
175
}
175
176
176
177
.mat-badge-accent {
177
- .mat-badge-content {
178
- background : theming .get-color-from-palette ($accent );
179
- color : theming .get-color-from-palette ($accent , default-contrast );
180
- }
178
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
179
+ tokens-mat-badge .private-get-color-palette-color-tokens ($accent ));
181
180
}
182
181
183
182
.mat-badge-warn {
184
- .mat-badge-content {
185
- color : theming .get-color-from-palette ($warn , default-contrast );
186
- background : theming .get-color-from-palette ($warn );
187
- }
188
- }
189
-
190
- .mat-badge-disabled {
191
- .mat-badge-content {
192
- $app-background : theming .get-color-from-palette ($background , ' background' );
193
- $badge-color : theming .get-color-from-palette ($foreground , disabled-button );
194
-
195
- // The disabled color usually has some kind of opacity, but because the badge is overlayed
196
- // on top of something else, it won't look good if it's opaque. If it is a color *type*,
197
- // we convert it into a solid color by taking the opacity from the rgba value and using
198
- // the value to determine the percentage of the background to put into foreground when
199
- // mixing the colors together.
200
- @if (meta .type-of ($badge-color ) == color and meta .type-of ($app-background ) == color ) {
201
- $badge-opacity : opacity ($badge-color );
202
- background : color .mix ($app-background , rgba ($badge-color , 1 ), (1 - $badge-opacity ) * 100% );
203
- }
204
- @else {
205
- background : $badge-color ;
206
- }
207
-
208
- color : theming .get-color-from-palette ($foreground , disabled-text );
209
- }
183
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
184
+ tokens-mat-badge .private-get-color-palette-color-tokens ($warn ));
210
185
}
211
186
}
212
187
213
188
@mixin typography ($config-or-theme ) {
214
189
$config : typography .private-typography-to-2014-config (
215
190
theming .get-typography-config ($config-or-theme ));
216
- .mat-badge-content {
217
- font-weight : $font-weight ;
218
- font-size : $font-size ;
219
- font-family : typography-utils .font-family ($config );
220
- }
221
-
222
- .mat-badge-small .mat-badge-content {
223
- // Set the font size to 75% of the original.
224
- font-size : $font-size * 0.75 ;
225
- }
226
191
227
- .mat-badge-large .mat-badge-content {
228
- font-size : $font-size * 2 ;
192
+ @include sass-utils .current-selector-or-root () {
193
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
194
+ tokens-mat-badge .get-typography-tokens ($config ));
229
195
}
230
196
}
231
197
0 commit comments