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 ;
@@ -19,78 +18,65 @@ $large-size: $default-size + 6;
19
18
$_badge-structure-emitted : false !default ;
20
19
21
20
// Mixin for building offset given different sizes
22
- @mixin _badge-size ($size ) {
21
+ @mixin _badge-size ($size , $font-size-token ) {
23
22
// This mixin isn't used in the context of a theme so we can disable the ampersand check.
24
23
// stylelint-disable material/no-ampersand-beyond-selector-start
25
24
.mat-badge-content {
26
25
width : $size ;
27
26
height : $size ;
28
27
line-height : $size ;
29
- }
30
28
31
- & .mat-badge-above {
32
- .mat-badge-content {
33
- top : math .div (- $size , 2 );
29
+ @if ($font-size-token ) {
30
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix ,
31
+ tokens-mat-badge .get-token-slots ()) {
32
+ @include token-utils .create-token-slot (font-size , $font-size-token );
33
+ }
34
34
}
35
35
}
36
36
37
- & .mat-badge-below {
38
- .mat-badge-content {
39
- bottom : math .div (- $size , 2 );
40
- }
37
+ & .mat-badge-above .mat-badge-content {
38
+ top : math .div (- $size , 2 );
41
39
}
42
40
43
- & .mat-badge-before {
44
- .mat-badge-content {
45
- left : - $size ;
46
- }
41
+ & .mat-badge-below .mat-badge-content {
42
+ bottom : math .div (- $size , 2 );
47
43
}
48
44
49
- [dir = ' rtl' ] & .mat-badge-before {
50
- .mat-badge-content {
51
- left : auto ;
52
- right : - $size ;
53
- }
45
+ & .mat-badge-before .mat-badge-content {
46
+ left : - $size ;
54
47
}
55
48
56
- & .mat-badge-after {
57
- .mat-badge-content {
58
- right : - $size ;
59
- }
49
+ [dir = ' rtl' ] & .mat-badge-before .mat-badge-content {
50
+ left : auto ;
51
+ right : - $size ;
60
52
}
61
53
62
- [dir = ' rtl' ] & .mat-badge-after {
63
- .mat-badge-content {
64
- right : auto ;
65
- left : - $size ;
66
- }
54
+ & .mat-badge-after .mat-badge-content {
55
+ right : - $size ;
56
+ }
57
+
58
+ [dir = ' rtl' ] & .mat-badge-after .mat-badge-content {
59
+ right : auto ;
60
+ left : - $size ;
67
61
}
68
62
69
63
& .mat-badge-overlap {
70
- & .mat-badge-before {
71
- .mat-badge-content {
72
- left : math .div (- $size , 2 );
73
- }
64
+ & .mat-badge-before .mat-badge-content {
65
+ left : math .div (- $size , 2 );
74
66
}
75
67
76
- [dir = ' rtl' ] & .mat-badge-before {
77
- .mat-badge-content {
78
- left : auto ;
79
- right : math .div (- $size , 2 );
80
- }
68
+ [dir = ' rtl' ] & .mat-badge-before .mat-badge-content {
69
+ left : auto ;
70
+ right : math .div (- $size , 2 );
81
71
}
82
72
83
- & .mat-badge-after {
84
- .mat-badge-content {
85
- right : math .div (- $size , 2 );
86
- }
73
+ & .mat-badge-after .mat-badge-content {
74
+ right : math .div (- $size , 2 );
87
75
}
88
76
89
- [dir = ' rtl' ] & .mat-badge-after {
90
- .mat-badge-content {
91
- right : auto ;
92
- left : math .div (- $size , 2 );
93
- }
77
+ [dir = ' rtl' ] & .mat-badge-after .mat-badge-content {
78
+ right : auto ;
79
+ left : math .div (- $size , 2 );
94
80
}
95
81
}
96
82
// stylelint-enable
@@ -101,19 +87,13 @@ $_badge-structure-emitted: false !default;
101
87
@mixin _badge-structure {
102
88
.mat-badge {
103
89
position : relative ;
104
- }
105
-
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
90
114
- .mat-badge-hidden {
115
- .mat-badge-content {
116
- display : none ;
91
+ // The badge should make sure its host is overflow visible so that the badge content
92
+ // can be rendered outside of the element. Some components such as <mat-icon> explicitly
93
+ // style `overflow: hidden` so this requires extra specificity so that it does not
94
+ // depend on style load order.
95
+ & .mat-badge {
96
+ overflow : visible ;
117
97
}
118
98
}
119
99
@@ -128,6 +108,30 @@ $_badge-structure-emitted: false !default;
128
108
white-space : nowrap ;
129
109
text-overflow : ellipsis ;
130
110
pointer-events : none ;
111
+
112
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix , tokens-mat-badge .get-token-slots ()) {
113
+ @include token-utils .create-token-slot (background-color , background-color );
114
+ @include token-utils .create-token-slot (color , text- color);
115
+ @include token-utils .create-token-slot (font-family , text- font);
116
+ @include token-utils .create-token-slot (font-size , text- size);
117
+ @include token-utils .create-token-slot (font-weight , text- weight);
118
+ }
119
+
120
+ @include cdk .high-contrast (active , off) {
121
+ outline : solid 1px ;
122
+ border-radius : 0 ;
123
+ }
124
+ }
125
+
126
+ .mat-badge-disabled .mat-badge-content {
127
+ @include token-utils .use-tokens (tokens-mat-badge .$prefix , tokens-mat-badge .get-token-slots ()) {
128
+ @include token-utils .create-token-slot (background-color , disabled- state- background- color);
129
+ @include token-utils .create-token-slot (color , disabled- state- text- color);
130
+ }
131
+ }
132
+
133
+ .mat-badge-hidden .mat-badge-content {
134
+ display : none ;
131
135
}
132
136
133
137
.ng-animate-disabled .mat-badge-content ,
@@ -143,89 +147,46 @@ $_badge-structure-emitted: false !default;
143
147
}
144
148
145
149
.mat-badge-small {
146
- @include _badge-size ($small-size );
150
+ @include _badge-size ($small-size , small - size - text - size );
147
151
}
148
152
149
153
.mat-badge-medium {
150
- @include _badge-size ($default-size );
154
+ @include _badge-size ($default-size , null );
151
155
}
152
156
153
157
.mat-badge-large {
154
- @include _badge-size ($large-size );
158
+ @include _badge-size ($large-size , large - size - text - size );
155
159
}
156
160
}
157
161
158
162
@mixin color ($config-or-theme ) {
159
163
$config : theming .get-color-config ($config-or-theme );
160
164
$accent : map .get ($config , accent );
161
165
$warn : map .get ($config , warn );
162
- $primary : map .get ($config , primary );
163
- $background : map .get ($config , background );
164
- $foreground : map .get ($config , foreground );
165
166
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
- }
167
+ @include sass-utils .current-selector-or-root () {
168
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
169
+ tokens-mat-badge .get-color-tokens ($config ));
174
170
}
175
171
176
172
.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
- }
173
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
174
+ tokens-mat-badge .private-get-color-palette-color-tokens ($accent ));
181
175
}
182
176
183
177
.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
- }
178
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
179
+ tokens-mat-badge .private-get-color-palette-color-tokens ($warn ));
210
180
}
211
181
}
212
182
213
183
@mixin typography ($config-or-theme ) {
214
184
$config : typography .private-typography-to-2014-config (
215
185
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
186
227
- .mat-badge-large .mat-badge-content {
228
- font-size : $font-size * 2 ;
187
+ @include sass-utils .current-selector-or-root () {
188
+ @include token-utils .create-token-values (tokens-mat-badge .$prefix ,
189
+ tokens-mat-badge .get-typography-tokens ($config ));
229
190
}
230
191
}
231
192
0 commit comments