sass-references/angular-material/material/table/table.scss

154 lines
5.8 KiB
SCSS

@use '../core/tokens/token-utils';
@use '../core/tokens/m2/mat/table' as tokens-mat-table;
@use '../core/style/vendor-prefixes';
@use './table-flex-styles';
.mat-mdc-table-sticky {
// Note that the table can either set this class or an inline style to make something sticky.
// We set the style as `!important` so that we get an identical specificity in both cases
// and to avoid cases where user styles have a higher specificity.
position: sticky !important;
}
@mixin _cell-border {
@include token-utils.create-token-slot(border-bottom-color, row-item-outline-color, true);
@include token-utils.create-token-slot(border-bottom-width, row-item-outline-width, true);
border-bottom-style: solid;
}
@include table-flex-styles.private-table-flex-styles();
.mat-mdc-table {
min-width: 100%;
border: 0;
border-spacing: 0;
table-layout: auto;
white-space: normal;
@include token-utils.use-tokens(tokens-mat-table.$prefix, tokens-mat-table.get-token-slots()) {
@include token-utils.create-token-slot(background-color, background-color);
}
}
.mdc-data-table__cell {
box-sizing: border-box;
overflow: hidden;
text-align: left;
text-overflow: ellipsis;
[dir='rtl'] & {
text-align: right;
}
}
.mdc-data-table__cell,
.mdc-data-table__header-cell {
padding: 0 16px;
}
@include token-utils.use-tokens(tokens-mat-table.$prefix, tokens-mat-table.get-token-slots()) {
// TODO(crisbeto): these tokens have default values in order to make the initial token
// work easier to land in g3. Eventually we should remove them.
.mat-mdc-header-row {
@include vendor-prefixes.smooth-font;
@include token-utils.create-token-slot(height, header-container-height, 56px);
@include token-utils.create-token-slot(color, header-headline-color, true);
@include token-utils.create-token-slot(font-family, header-headline-font, true);
@include token-utils.create-token-slot(line-height, header-headline-line-height);
@include token-utils.create-token-slot(font-size, header-headline-size, 14px);
@include token-utils.create-token-slot(font-weight, header-headline-weight, 500);
}
.mat-mdc-row {
@include token-utils.create-token-slot(height, row-item-container-height, 52px);
@include token-utils.create-token-slot(color, row-item-label-text-color, true);
}
// Note that while it's redundant to apply the typography both to the row
// and the content element since the cell inherit from both of them,
// applying it only to one results in sub-pixel differences in the
// letter spacing which leads to a lot of internal screenshot diffs.
.mat-mdc-row,
.mdc-data-table__content {
@include vendor-prefixes.smooth-font;
@include token-utils.create-token-slot(font-family, row-item-label-text-font, true);
@include token-utils.create-token-slot(line-height, row-item-label-text-line-height);
@include token-utils.create-token-slot(font-size, row-item-label-text-size, 14px);
@include token-utils.create-token-slot(font-weight, row-item-label-text-weight);
}
.mat-mdc-footer-row {
@include vendor-prefixes.smooth-font;
@include token-utils.create-token-slot(height, footer-container-height, 52px);
@include token-utils.create-token-slot(color, row-item-label-text-color, true);
@include token-utils.create-token-slot(font-family, footer-supporting-text-font, true);
@include token-utils.create-token-slot(line-height, footer-supporting-text-line-height);
@include token-utils.create-token-slot(font-size, footer-supporting-text-size, 14px);
@include token-utils.create-token-slot(font-weight, footer-supporting-text-weight);
@include token-utils.create-token-slot(letter-spacing, footer-supporting-text-tracking);
}
.mat-mdc-header-cell {
@include _cell-border;
@include token-utils.create-token-slot(letter-spacing, header-headline-tracking);
font-weight: inherit;
line-height: inherit;
box-sizing: border-box;
text-overflow: ellipsis;
overflow: hidden;
outline: none;
text-align: left;
[dir='rtl'] & {
text-align: right;
}
}
.mat-mdc-cell {
@include _cell-border;
@include token-utils.create-token-slot(letter-spacing, row-item-label-text-tracking);
line-height: inherit;
.mdc-data-table__row:last-child & {
border-bottom: none;
}
}
.mat-mdc-footer-cell {
@include token-utils.create-token-slot(letter-spacing, row-item-label-text-tracking);
}
}
// MDC table rows are styled with a top border, whereas our legacy flex table styles rows with
// a bottom border. Remove the bottom border style from the rows and let MDC display its top
// border.
mat-row.mat-mdc-row, mat-header-row.mat-mdc-header-row, mat-footer-row.mat-mdc-footer-row {
border-bottom: none;
}
// Cells need to inherit their background in order to overlap each other when sticky.
// The background needs to be inherited from the table, tbody/tfoot, row, and cell.
.mat-mdc-table tbody, .mat-mdc-table tfoot, .mat-mdc-table thead,
.mat-mdc-cell, .mat-mdc-footer-cell,
.mat-mdc-header-row, .mat-mdc-row, .mat-mdc-footer-row,
.mat-mdc-table .mat-mdc-header-cell {
background: inherit;
}
// Flex rows should not set a definite height, but instead stretch to the height of their
// children. Otherwise, the cells grow larger than the row and the layout breaks.
.mat-mdc-table mat-header-row.mat-mdc-header-row,
.mat-mdc-table mat-row.mat-mdc-row,
.mat-mdc-table mat-footer-row.mat-mdc-footer-cell {
height: unset;
}
// Flex cells should stretch to the height of their parent. This was okay for the legacy
// table since the cells were centered and the borders displayed on the rows, but the MDC
// version displays borders on the cells and do not correctly line up with the row bottom.
mat-header-cell.mat-mdc-header-cell,
mat-cell.mat-mdc-cell,
mat-footer-cell.mat-mdc-footer-cell {
align-self: stretch;
}