@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; }