157 lines
4.6 KiB
SCSS
157 lines
4.6 KiB
SCSS
|
|
@use '@angular/cdk';
|
|
@use '../core/tokens/m2/mat/expansion' as tokens-mat-expansion;
|
|
@use '../core/tokens/token-utils';
|
|
@use '../core/style/variables';
|
|
@use '../core/style/elevation';
|
|
|
|
.mat-expansion-panel {
|
|
box-sizing: content-box;
|
|
display: block;
|
|
margin: 0;
|
|
overflow: hidden;
|
|
|
|
&.mat-expansion-panel-animations-enabled {
|
|
transition: margin 225ms variables.$fast-out-slow-in-timing-function,
|
|
elevation.private-transition-property-value();
|
|
}
|
|
|
|
// Required so that the `box-shadow` works after the
|
|
// focus indicator relatively positions the header.
|
|
position: relative;
|
|
|
|
@include token-utils.use-tokens(
|
|
tokens-mat-expansion.$prefix, tokens-mat-expansion.get-token-slots()) {
|
|
@include token-utils.create-token-slot(background, container-background-color);
|
|
@include token-utils.create-token-slot(color, container-text-color);
|
|
@include token-utils.create-token-slot(border-radius, container-shape);
|
|
}
|
|
|
|
@include elevation.overridable-elevation(2);
|
|
|
|
.mat-accordion & {
|
|
&:not(.mat-expanded), &:not(.mat-expansion-panel-spacing) {
|
|
border-radius: 0;
|
|
}
|
|
|
|
@include token-utils.use-tokens(
|
|
tokens-mat-expansion.$prefix, tokens-mat-expansion.get-token-slots()) {
|
|
&:first-of-type {
|
|
@include token-utils.create-token-slot(border-top-right-radius, container-shape);
|
|
@include token-utils.create-token-slot(border-top-left-radius, container-shape);
|
|
}
|
|
|
|
&:last-of-type {
|
|
@include token-utils.create-token-slot(border-bottom-right-radius, container-shape);
|
|
@include token-utils.create-token-slot(border-bottom-left-radius, container-shape);
|
|
}
|
|
}
|
|
}
|
|
|
|
@include cdk.high-contrast {
|
|
outline: solid 1px;
|
|
}
|
|
}
|
|
|
|
.mat-expansion-panel-content-wrapper {
|
|
// Note: we can't use `overflow: hidden` here, because it can clip content with
|
|
// ripples or box shadows. Instead we transition the `visibility` below.
|
|
// Based on https://css-tricks.com/css-grid-can-do-auto-height-transitions.
|
|
display: grid;
|
|
grid-template-rows: 0fr;
|
|
grid-template-columns: 100%;
|
|
|
|
.mat-expansion-panel-animations-enabled & {
|
|
transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
}
|
|
|
|
.mat-expansion-panel.mat-expanded > & {
|
|
grid-template-rows: 1fr;
|
|
}
|
|
|
|
// All the browsers we support have support for `grid` as well, but
|
|
// given that these styles are load-bearing for the expansion panel,
|
|
// we have a fallback to `height` which doesn't animate, just in case.
|
|
// stylelint-disable material/no-prefixes
|
|
@supports not (grid-template-rows: 0fr) {
|
|
height: 0;
|
|
|
|
.mat-expansion-panel.mat-expanded > & {
|
|
height: auto;
|
|
}
|
|
}
|
|
// stylelint-enable material/no-prefixes
|
|
}
|
|
|
|
.mat-expansion-panel-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: visible;
|
|
min-height: 0;
|
|
|
|
// The visibility here serves two purposes:
|
|
// 1. Hiding content from assistive technology.
|
|
// 2. Hiding any content that might be overflowing.
|
|
visibility: hidden;
|
|
|
|
.mat-expansion-panel-animations-enabled & {
|
|
// The duration here is slightly lower so the content
|
|
// goes away quicker than the collapse transition.
|
|
transition: visibility 190ms linear;
|
|
}
|
|
|
|
.mat-expansion-panel.mat-expanded > .mat-expansion-panel-content-wrapper > & {
|
|
visibility: visible;
|
|
}
|
|
|
|
@include token-utils.use-tokens(
|
|
tokens-mat-expansion.$prefix, tokens-mat-expansion.get-token-slots()) {
|
|
@include token-utils.create-token-slot(font-family, container-text-font);
|
|
@include token-utils.create-token-slot(font-size, container-text-size);
|
|
@include token-utils.create-token-slot(font-weight, container-text-weight);
|
|
@include token-utils.create-token-slot(line-height, container-text-line-height);
|
|
@include token-utils.create-token-slot(letter-spacing, container-text-tracking);
|
|
}
|
|
}
|
|
|
|
.mat-expansion-panel-body {
|
|
padding: 0 24px 16px;
|
|
}
|
|
|
|
.mat-expansion-panel-spacing {
|
|
margin: 16px 0;
|
|
|
|
.mat-accordion > &:first-child,
|
|
.mat-accordion > *:first-child:not(.mat-expansion-panel) & {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.mat-accordion > &:last-child,
|
|
.mat-accordion > *:last-child:not(.mat-expansion-panel) & {
|
|
margin-bottom: 0;
|
|
}
|
|
}
|
|
|
|
.mat-action-row {
|
|
border-top-style: solid;
|
|
border-top-width: 1px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: flex-end;
|
|
padding: 16px 8px 16px 24px;
|
|
|
|
@include token-utils.use-tokens(
|
|
tokens-mat-expansion.$prefix, tokens-mat-expansion.get-token-slots()) {
|
|
@include token-utils.create-token-slot(border-top-color, actions-divider-color);
|
|
}
|
|
|
|
.mat-button-base, .mat-mdc-button-base {
|
|
margin-left: 8px;
|
|
|
|
[dir='rtl'] & {
|
|
margin-left: 0;
|
|
margin-right: 8px;
|
|
}
|
|
}
|
|
}
|