1
1
@use ' @angular/cdk' ;
2
2
3
+ @use ' ../core/tokens/m2/mat/sidenav' as tokens-mat-sidenav ;
4
+ @use ' ../core/tokens/token-utils' ;
3
5
@use ' ../core/style/variables' ;
4
6
@use ' ../core/style/layout-common' ;
7
+ @use ' ../core/style/elevation' ;
5
8
6
9
$drawer-content-z-index : 1 ;
7
10
$drawer-side-drawer-z-index : 2 ;
@@ -25,6 +28,12 @@ $drawer-over-drawer-z-index: 4;
25
28
// the application content does not get messed up with our own CSS.
26
29
@include drawer-stacking-context ();
27
30
31
+ @include token-utils .use-tokens (
32
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
33
+ @include token-utils .create-token-slot (color , content- text- color);
34
+ @include token-utils .create-token-slot (background-color , content- background- color);
35
+ }
36
+
28
37
box-sizing : border-box ;
29
38
-webkit-overflow-scrolling : touch ;
30
39
@@ -74,6 +83,11 @@ $drawer-over-drawer-z-index: 4;
74
83
75
84
& .mat-drawer-shown {
76
85
visibility : visible ;
86
+
87
+ @include token-utils .use-tokens (
88
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
89
+ @include token-utils .create-token-slot (background-color , scrim- color);
90
+ }
77
91
}
78
92
79
93
.mat-drawer-transition & {
@@ -108,7 +122,20 @@ $drawer-over-drawer-z-index: 4;
108
122
.mat-drawer {
109
123
$high-contrast-border : solid 1px currentColor ;
110
124
125
+ // The elevation of z-16 is noted in the design specifications.
126
+ // See https://material.io/design/components/navigation-drawer.html
127
+ @include elevation .elevation (16 );
111
128
@include drawer-stacking-context ($drawer-over-drawer-z-index );
129
+ @include token-utils .create-token-values (
130
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-unthemable-tokens ());
131
+
132
+ @include token-utils .use-tokens (
133
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
134
+ @include token-utils .create-token-slot (color , container- text- color);
135
+ @include token-utils .create-token-slot (background-color , container- background- color);
136
+ @include token-utils .create-token-slot (border-top-right-radius , container- shape);
137
+ @include token-utils .create-token-slot (border-bottom-right-radius , container- shape);
138
+ }
112
139
113
140
display : block ;
114
141
position : absolute ;
@@ -120,6 +147,7 @@ $drawer-over-drawer-z-index: 4;
120
147
overflow-y : auto ; // TODO(kara): revisit scrolling behavior for drawers
121
148
transform : translate3d (-100% , 0 , 0 );
122
149
150
+
123
151
& , [dir = ' rtl' ] & .mat-drawer-end {
124
152
@include cdk .high-contrast (active , off) {
125
153
border-right : $high-contrast-border ;
@@ -140,15 +168,34 @@ $drawer-over-drawer-z-index: 4;
140
168
& .mat-drawer-end {
141
169
right : 0 ;
142
170
transform : translate3d (100% , 0 , 0 );
171
+
172
+ @include token-utils .use-tokens (
173
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
174
+ @include token-utils .create-token-slot (border-top-left-radius , container- shape);
175
+ @include token-utils .create-token-slot (border-bottom-left-radius , container- shape);
176
+ border-top-right-radius : 0 ;
177
+ border-bottom-right-radius : 0 ;
178
+ }
143
179
}
144
180
145
181
[dir = ' rtl' ] & {
146
- transform : translate3d (100% , 0 , 0 );
147
-
148
- & .mat-drawer-end {
149
- left : 0 ;
150
- right : auto ;
151
- transform : translate3d (-100% , 0 , 0 );
182
+ @include token-utils .use-tokens (
183
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
184
+ @include token-utils .create-token-slot (border-top-left-radius , container- shape);
185
+ @include token-utils .create-token-slot (border-bottom-left-radius , container- shape);
186
+ border-top-right-radius : 0 ;
187
+ border-bottom-right-radius : 0 ;
188
+ transform : translate3d (100% , 0 , 0 );
189
+
190
+ & .mat-drawer-end {
191
+ @include token-utils .create-token-slot (border-top-right-radius , container- shape);
192
+ @include token-utils .create-token-slot (border-bottom-right-radius , container- shape);
193
+ border-top-left-radius : 0 ;
194
+ border-bottom-left-radius : 0 ;
195
+ left : 0 ;
196
+ right : auto ;
197
+ transform : translate3d (-100% , 0 , 0 );
198
+ }
152
199
}
153
200
}
154
201
@@ -164,6 +211,38 @@ $drawer-over-drawer-z-index: 4;
164
211
}
165
212
}
166
213
214
+ .mat-drawer-side {
215
+ box-shadow : none ;
216
+
217
+ @include token-utils .use-tokens (
218
+ tokens-mat-sidenav .$prefix , tokens-mat-sidenav .get-token-slots ()) {
219
+ @include token-utils .create-token-slot (border-right-color , container- divider- color);
220
+ border-right-width : 1px ;
221
+ border-right-style : solid ;
222
+
223
+ & .mat-drawer-end {
224
+ @include token-utils .create-token-slot (border-left-color , container- divider- color);
225
+ border-left-width : 1px ;
226
+ border-left-style : solid ;
227
+ border-right : none ;
228
+ }
229
+
230
+ [dir = ' rtl' ] & {
231
+ @include token-utils .create-token-slot (border-left-color , container- divider- color);
232
+ border-left-width : 1px ;
233
+ border-left-style : solid ;
234
+ border-right : none ; // Clears the default LTR border.
235
+
236
+ & .mat-drawer-end {
237
+ @include token-utils .create-token-slot (border-right-color , container- divider- color);
238
+ border-right-width : 1px ;
239
+ border-right-style : solid ;
240
+ border-left : none ;
241
+ }
242
+ }
243
+ }
244
+ }
245
+
167
246
// Note that this div isn't strictly necessary on all browsers, however we need it in
168
247
// order to avoid a layout issue in Chrome. The issue is that in RTL mode the browser doesn't
169
248
// account for the sidenav's scrollbar while positioning, which ends up pushing it partially
0 commit comments