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