4
4
@use ' ./m3' ;
5
5
@use ' ./m3/definitions' as m3-token-definitions ;
6
6
@use ' ../tokens/m2' as m2-tokens ;
7
+ @use ' ../style/elevation' ;
7
8
@use ' ./density' ;
8
9
@use ' ./format-tokens' ;
9
10
11
+ // Default system level prefix to use when directly calling the `system-level-*` mixins
12
+ $system-level-prefix : sys;
13
+
14
+ // Prefix used for component token fallback variables, e.g.
15
+ // `color: var(--mdc-text-button-label-text-color, var(--mat-app-primary));`
16
+ $system-fallback-prefix : mat- app;
17
+
10
18
/// Generates tokens for the given palette with the given prefix.
11
19
/// @param {Map} $palette The palette to generate tokens for
12
20
/// @param {String} $prefix The key prefix used to name the tokens
@@ -87,7 +95,7 @@ $_cached-token-slots: null;
87
95
/// @param {Map} $systems The MDC system tokens
88
96
/// @param {Boolean} $include-non-systemized Whether to include non-systemized tokens
89
97
/// @return {Map} A map of namespaced tokens
90
- @function _generate-tokens ($systems , $include-non-systemized : false ) {
98
+ @function _generate-tokens ($systems , $include-non-systemized : false , $include-density : false ) {
91
99
$systems : map .merge ((
92
100
md- sys- color: (),
93
101
md- sys- elevation: (),
@@ -116,16 +124,63 @@ $_cached-token-slots: null;
116
124
// Strip out tokens that are systemized by our made up density system.
117
125
@each $namespace , $tokens in $result {
118
126
@each $token , $value in $tokens {
119
- @if density .is-systemized ($namespace , $token ) {
127
+ @if density .is-systemized ($namespace , $token ) and not $include-density {
120
128
$tokens : map .remove ($tokens , $token );
121
129
}
122
130
}
123
131
$result : map .set ($result , $namespace , $tokens );
124
132
}
133
+
125
134
@return $result ;
126
135
}
127
136
128
- @mixin system-level-colors ($theme , $overrides : ()) {
137
+ // Return a new map where the values are the same as the provided map's
138
+ // keys, prefixed with "--mat-app-". For example:
139
+ // (key1: '', key2: '') --> (key1: --mat-app-key1, key2: --mat-app-key2)
140
+ @function create-system-app-vars-map ($map ) {
141
+ $new-map : ();
142
+ @each $key , $value in $map {
143
+ $new-map : map .set ($new-map , $key , --#{$system-fallback-prefix}-#{$key} );
144
+ }
145
+ @return $new-map ;
146
+ }
147
+
148
+ // Create a components tokens map where values are based on
149
+ // system fallback variables referencing Material's system keys.
150
+ // Includes density token fallbacks where density is 0.
151
+ @function create-system-fallbacks () {
152
+ $app-vars : (
153
+ ' md-sys-color' :
154
+ create-system-app-vars-map (m3-token-definitions .md-sys-color-values-light ()),
155
+ ' md-sys-typescale' :
156
+ create-system-app-vars-map (m3-token-definitions .md-sys-typescale-values ()),
157
+ ' md-sys-elevation' :
158
+ create-system-app-vars-map (m3-token-definitions .md-sys-elevation-values ()),
159
+ ' md-sys-state' :
160
+ create-system-app-vars-map (m3-token-definitions .md-sys-state-values ()),
161
+ ' md-sys-shape' :
162
+ create-system-app-vars-map (m3-token-definitions .md-sys-shape-values ()),
163
+ );
164
+
165
+ @return sass-utils .deep-merge-all (
166
+ _generate-tokens ($app-vars , true , true ),
167
+ generate-density-tokens (0 )
168
+ );
169
+ }
170
+
171
+ // Emits CSS variables for Material's system level values. Uses the
172
+ // namespace prefix in $system-fallback-prefix.
173
+ // e.g. --mat-app-surface: #E5E5E5
174
+ @mixin theme ($theme , $overrides : ()) {
175
+ @include system-level-colors ($theme , $overrides , $system-fallback-prefix );
176
+ @include system-level-typography ($theme , $overrides , $system-fallback-prefix );
177
+ @include system-level-elevation ($theme , $overrides , $system-fallback-prefix );
178
+ @include system-level-shape ($theme , $overrides , $system-fallback-prefix );
179
+ @include system-level-motion ($theme , $overrides , $system-fallback-prefix );
180
+ @include system-level-state ($theme , $overrides , $system-fallback-prefix );
181
+ }
182
+
183
+ @mixin system-level-colors ($theme , $overrides : (), $prefix : null) {
129
184
$palettes : map .get ($theme , _mat-theming-internals-do-not-access , palettes );
130
185
$base-palettes : (
131
186
neutral: map .get ($palettes , neutral ),
@@ -135,11 +190,15 @@ $_cached-token-slots: null;
135
190
);
136
191
137
192
$type : map .get ($theme , _mat-theming-internals-do-not-access , theme-type );
138
- $system-variables-prefix : map .get ($theme , system-variables-prefix ) or sys;
139
193
$primary : map .merge (map .get ($palettes , primary ), $base-palettes );
140
194
$tertiary : map .merge (map .get ($palettes , tertiary ), $base-palettes );
141
195
$error : map .get ($palettes , error );
142
196
197
+ @if (not $prefix ) {
198
+ // TODO: Change this after #29513 is merged.
199
+ $prefix : map .get ($theme , system-variables-prefix ) or $system-level-prefix ;
200
+ }
201
+
143
202
$ref : (
144
203
md- ref- palette: _generate-ref-palette-tokens ($primary , $tertiary , $error )
145
204
);
@@ -149,26 +208,28 @@ $_cached-token-slots: null;
149
208
m3-token-definitions .md-sys-color-values-light ($ref ));
150
209
151
210
@each $name , $value in $sys-colors {
152
- -- #{$system-variables- prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
211
+ -- #{$prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
153
212
}
154
213
}
155
214
156
- @mixin system-level-typography ($theme , $overrides : ()) {
215
+ @mixin system-level-typography ($theme , $overrides : (), $prefix : null ) {
157
216
$font-definition : map .get ($theme , _mat-theming-internals-do-not-access , font-definition );
158
217
$brand : map .get ($font-definition , brand );
159
218
$plain : map .get ($font-definition , plain );
160
219
$bold : map .get ($font-definition , bold );
161
220
$medium : map .get ($font-definition , medium );
162
221
$regular : map .get ($font-definition , regular );
163
- $system-variables-prefix : map .get ($theme , system-variables-prefix ) or sys;
164
222
$ref : (
165
223
md- ref- typeface: _generate-ref-typeface-tokens ($brand , $plain , $bold , $medium , $regular )
166
224
);
167
225
168
- $sys-typescale : m3-token-definitions .md-sys-typescale-values ($ref );
226
+ @if (not $prefix ) {
227
+ // TODO: Change this after #29513 is merged.
228
+ $prefix : map .get ($theme , system-variables-prefix ) or $system-level-prefix ;
229
+ }
169
230
170
- @each $name , $value in $ sys-typescale {
171
- -- #{$system-variables- prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
231
+ @each $name , $value in m3-token-definitions . md- sys-typescale-values ( $ref ) {
232
+ -- #{$prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
172
233
}
173
234
}
174
235
@@ -180,6 +241,40 @@ $_cached-token-slots: null;
180
241
@return $result ;
181
242
}
182
243
244
+ @mixin system-level-elevation ($theme , $overrides : (), $prefix : $system-level-prefix ) {
245
+ $shadow-color : map .get (
246
+ $theme , _mat-theming-internals-do-not-access , color-tokens , (mdc, theme), shadow );
247
+
248
+ @for $level from 0 through 24 {
249
+ $value : elevation .get-box-shadow ($level , $shadow-color );
250
+ -- #{$prefix } -elevation-shadow-level- #{$level } : #{$value } ;
251
+ }
252
+
253
+ @each $name , $value in m3-token-definitions .md-sys-elevation-values () {
254
+ $level : map .get ($overrides , $name ) or $value ;
255
+ $value : elevation .get-box-shadow ($level , $shadow-color );
256
+ -- #{$prefix } - #{$name } : #{$value } ;
257
+ }
258
+ }
259
+
260
+ @mixin system-level-shape ($theme , $overrides : (), $prefix : $system-level-prefix ) {
261
+ @each $name , $value in m3-token-definitions .md-sys-shape-values () {
262
+ -- #{$prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
263
+ }
264
+ }
265
+
266
+ @mixin system-level-state ($theme , $overrides : (), $prefix : $system-level-prefix ) {
267
+ @each $name , $value in m3-token-definitions .md-sys-state-values () {
268
+ -- #{$prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
269
+ }
270
+ }
271
+
272
+ @mixin system-level-motion ($theme , $overrides : (), $prefix : $system-level-prefix ) {
273
+ @each $name , $value in m3-token-definitions .md-sys-motion-values () {
274
+ -- #{$prefix } - #{$name } : #{map .get ($overrides , $name ) or $value } ;
275
+ }
276
+ }
277
+
183
278
@function _get-sys-color ($type , $ref , $prefix ) {
184
279
$mdc-sys-color : if ($type == dark ,
185
280
m3-token-definitions .md-sys-color-values-dark ($ref ),
0 commit comments