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