blob: 6109194635c490f5e4b749d61fd3b5a38b37d4e4 [file] [log] [blame]
Copybara botbe50d492023-11-30 00:16:42 +01001@charset "UTF-8";
2
3/**
4 * @license
5 * Copyright 2016 Leif Olsen. All Rights Reserved.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * This code is built with Google Material Design Lite,
20 * which is Licensed under the Apache License, Version 2.0
21 */
22
23.mdlext-aria-toggle-plus-minus {
24 @include mdlext-aria-expanded-toggle($font-family: inherit, $font-size: 1.4em);
25}
26
27.mdlext-aria-toggle-material-icons {
28 @include mdlext-aria-expanded-toggle($font-size: 1.3em, $icon: 'expand_more', $icon-expanded: 'expand_less', $icon-offset: -$mdlext-accordion-header-padding);
29}
30
31.mdlext-accordion {
32 box-sizing: border-box;
33 margin: 0;
34 padding: 0;
35 list-style: none;
36 display: flex;
37
38 * {
39 box-sizing: border-box;
40 }
41
42 &__panel {
43 box-sizing: border-box;
44 position: relative;
45 overflow: hidden;
46 display: flex;
47 flex-wrap: nowrap;
48 }
49
50 &__tab {
51 @include typo-title();
52
53 font-weight: 400;
54 line-height: 1.1;
55 box-sizing: border-box;
56 position: relative;
57 margin: 0;
58 padding: 0; // $mdlext-accordion-header-padding;
59 min-width: $mdlext-accordion-header-height;
60 min-height: $mdlext-accordion-header-height;
61 display: flex;
62 align-items: center;
63 align-self: stretch;
64 user-select: none;
65 color: $mdlext-accordion-header-secondary-color;
66 background-color: $mdlext-accordion-header-background-color;
67 cursor: pointer;
68 overflow: hidden;
69
70 &:focus {
71 outline-offset: -2px;
72 outline-color: $mdlext-accordion-header-focus-outline-color;
73 outline-width: 2px;
74 }
75
76 &[aria-expanded='true'] {
77 background-color: $mdlext-accordion-header-background-open-color;
78 }
79
80 &[aria-selected='true'] {
81 background-color: $mdlext-accordion-header-background-active-color;
82 }
83
84 &[disabled] {
85 background-color: $mdlext-accordion-header-disabled-color;
86 color: $mdlext-accordion-header-secondary-color-disabled;
87 pointer-events: none;
88
89 > * {
90 color: $mdlext-accordion-header-secondary-color-disabled;
91 }
92 }
93
94 &:hover:not([disabled]) {
95 background-color: $mdlext-accordion-header-background-hover-color;
96 }
97
98 > * {
99 margin: 0;
100 padding: 0;
101 }
102
103 &__caption {
104 padding-left: $mdlext-accordion-header-padding;
105 padding-right: $mdlext-accordion-header-padding;
106 white-space: nowrap;
107 overflow: hidden;
108 text-overflow: ellipsis;
109 }
110
111 > *:first-child {
112 padding-left: 0;
113 }
114
115 &--ripple {
116 &[aria-selected='true']::before {
117 content: '';
118 position: absolute;
119 top: 50%;
120 left: 50%;
121 background: $mdlext-accordion-ripple-color;
122 opacity: 0;
123 border-radius: 100%;
124 transform: scale(1, 1) translate(-50%);
125 transform-origin: 50% 50%;
126 }
127 &[aria-selected='true']:focus:not(:active)::before {
128 // http://easings.net/
129 animation: mdlext-accordion-tab-ripple 1s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; // cubic-bezier(0.4, 0.0, 1, 1); //cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards; //ease-out;
130 }
131 }
132 }
133
134 &__tabpanel {
135 box-sizing: border-box;
136 margin: 0;
137 padding: 0 $mdlext-accordion-content-padding;
138 color: $mdlext-accordion-content-color;
139 background-color: $mdlext-accordion-content-background-color;
140 display: block;
141 overflow: auto;
142 flex-grow: 1;
143
144 &[hidden] {
145 @include mdlext-visually-hidden;
146 }
147 }
148}
149
150// Vertical layout
151.mdlext-accordion {
152
153 &--vertical {
154 flex-direction: column;
155 flex-wrap: nowrap;
156
157 .mdlext-accordion__panel {
158 min-height: $mdlext-accordion-header-height;
159 flex-direction: column;
160 }
161
162 .mdlext-accordion__tab {
163 height: $mdlext-accordion-header-height;
164 border-top: 1px solid $mdlext-accordion-header-border-color;
165 padding-left: $mdlext-accordion-header-padding;
166 padding-right: $mdlext-accordion-header-padding;
167
168 &[aria-selected='true']::after {
169 position: absolute;
170 bottom: 0;
171 left: 0;
172 height: 1px;
173 width: 100%;
174 display: block;
175 content: " ";
176 background-color: $mdlext-accordion-header-highlight-color;
177 animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;
178 transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);
179 }
180
181 > * {
182 padding-left: $mdlext-accordion-header-padding;
183 }
184
185 > *:first-child {
186 padding-left: 0;
187 }
188
189 > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
190 margin-left: auto; // If more than one element, push last element to the right
191 }
192
193 &--ripple {
194 &[aria-selected='true']::before {
195 width: 5%;
196 height: 10%;
197 }
198 }
199
200 }
201
202 .mdlext-accordion__tabpanel {
203 border-top: 1px solid $mdlext-accordion-header-border-color;
204
205 &--animation {
206 transform: scaleY(1);
207 animation: mdlext-accordion-show-tabpanel-y 0.2s ease-in-out;
208
209 &[hidden] {
210 transform: scaleY(0);
211 animation: mdlext-accordion-hide-tabpanel-y 0.2s ease-out;
212 animation-delay: 0.1s;
213 }
214 }
215 }
216 }
217}
218
219// Horizontal layout
220.mdlext-accordion {
221
222 &--horizontal {
223
224 .mdlext-accordion__panel {
225 min-width: $mdlext-accordion-header-height;
226 width: $mdlext-accordion-header-height;
227 }
228
229 &[aria-multiselectable='true'] .mdlext-accordion__panel.is-expanded {
230 width: 100%;
231 }
232
233 .mdlext-accordion__tab {
234 flex-direction: column-reverse;
235 width: $mdlext-accordion-header-height;
236 white-space: nowrap;
237 border-left: 1px solid $mdlext-accordion-header-border-color;
238
239 &[aria-selected='true']::after {
240 position: absolute;
241 top: 0;
242 right: 0;
243 height: 100%;
244 width: 1px;
245 display: block;
246 content: " ";
247 background-color: $mdlext-accordion-header-highlight-color;
248
249 // Figure out how to animate a vertical line
250 //animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;
251 //transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);
252 }
253
254 > * {
255 //transform: rotate(-90deg) translateX(50%);
256 transform: rotate(-90deg) translateX($mdlext-accordion-header-padding);
257 }
258
259 > *:last-child:not(:only-child):not(.mdlext-accordion__tab__caption) {
260 // If more than one element, push last element to top
261 margin-bottom: auto;
262 transform: rotate(-90deg) translateX(0);
263 }
264
265 &__caption {
266 transform: rotate(-90deg) translateX(50%);
267 padding-right: $mdlext-accordion-header-padding + 8px;
268 }
269
270 &--ripple {
271 &[aria-selected='true']::before {
272 width: 10%;
273 height: 5%;
274 }
275 }
276 }
277
278 .mdlext-accordion__tabpanel {
279 border-left: 1px solid $mdlext-accordion-header-border-color;
280
281 &--animation {
282 transform: scaleX(1);
283 animation: mdlext-accordion-show-tabpanel-x 0.2s ease-in-out;
284
285 &[hidden] {
286 transform: scaleX(0);
287 animation: mdlext-accordion-hide-tabpanel-x 0.2s ease-out;
288 }
289 }
290 }
291 }
292}
293
294.mdlext-accordion {
295
296 &__panel:first-child > &__tab {
297 // Use container to set outer borders
298 border-top-color: transparent;
299 border-left-color: transparent;
300 }
301
302 &[aria-multiselectable="false"] {
303 .mdlext-accordion__panel.is-expanded {
304 flex-grow: 1;
305 }
306 }
307}
308
309// Making accordion appear disabled.
310// Note: does not prevent tabbing into a disabled accordion
311.mdlext-accordion[disabled] {
312 * {
313 pointer-events: none;
314 }
315 .mdlext-accordion__tab {
316 background-color: $mdlext-accordion-header-disabled-color;
317 color: $mdlext-accordion-header-secondary-color-disabled;
318
319 > * {
320 color: $mdlext-accordion-header-secondary-color-disabled;
321 }
322 }
323 .mdlext-accordion__tabpanel {
324 opacity: 0.8;
325 filter: blur(1px) grayscale(80%);
326 }
327}
328
329
330@keyframes mdlext-accordion-tab-ripple {
331 0% {
332 transform: scale(0, 0);
333 opacity: 1;
334 }
335 20% {
336 transform: scale(25, 25);
337 opacity: 1;
338 }
339 100% {
340 opacity: 0;
341 transform: scale(40, 40);
342 }
343}
344
345/*
346@keyframes mdlext-accordion-show-tabpanel-y {
347 0% { transform: scaleY(0.1); }
348 40% { transform: scaleY(1.03); }
349 60% { transform: scaleY(0.98); }
350 80% { transform: scaleY(1.03); }
351 100% { transform: scaleY(0.98); }
352 80% { transform: scaleY(1.01); }
353 100% { transform: scaleY(1); }
354}
355*/
356
357@keyframes mdlext-accordion-show-tabpanel-y {
358 0% { transform: scaleY(0); }
359 60% { transform: scaleY(1.01); }
360 80% { transform: scaleY(0.98); }
361 100% { transform: scaleY(1); }
362}
363
364@keyframes mdlext-accordion-hide-tabpanel-y {
365 0% { transform: scaleY(1); }
366 60% { transform: scaleY(0.98); }
367 80% { transform: scaleY(1.01); }
368 100% { transform: scaleY(0); }
369}
370
371/*
372@keyframes mdlext-accordion-show-tabpanel-x {
373 0% { transform: scaleX(0.1); }
374 40% { transform: scaleX(1.03); }
375 60% { transform: scaleX(0.98); }
376 80% { transform: scaleX(1.03); }
377 100% { transform: scaleX(0.98); }
378 80% { transform: scaleX(1.01); }
379 100% { transform: scaleX(1); }
380}
381*/
382
383@keyframes mdlext-accordion-show-tabpanel-x {
384 0% { transform: scaleX(0); }
385 60% { transform: scaleX(1.01); }
386 80% { transform: scaleX(0.98); }
387 100% { transform: scaleX(1); }
388}
389
390@keyframes mdlext-accordion-hide-tabpanel-x {
391 0% { transform: scaleX(1); }
392 60% { transform: scaleX(0.98); }
393 80% { transform: scaleX(1.01); }
394 100% { transform: scaleX(0); }
395}