$mat-header-row-height: 56px;
$mat-row-height: 48px;
$mat-row-horizontal-padding: 24px;

/**
 * Flex-based table structure
 */
mat-table {
  display: block;
}

mat-header-row {
  min-height: $mat-header-row-height;
}

mat-row, mat-footer-row {
  min-height: $mat-row-height;
}

mat-row, mat-header-row, mat-footer-row {
  display: flex;
  // Define a border style, but then widths default to 3px. Reset them to 0px except the bottom
  // which should be 1px;
  border-width: 0;
  border-bottom-width: 1px;
  border-style: solid;
  align-items: center;
  box-sizing: border-box;

  // Workaround for https://goo.gl/pFmjJD in IE 11. Adds a pseudo
  // element that will stretch the row the correct height. See:
  // https://connect.microsoft.com/IE/feedback/details/802625
  &::after {
    display: inline-block;
    min-height: inherit;
    content: '';
  }
}

// Note: we use `first-of-type`/`last-of-type` here in order to prevent extra
// elements like ripples or badges from throwing off the layout (see #11165).
mat-cell:first-of-type, mat-header-cell:first-of-type, mat-footer-cell:first-of-type {
  padding-left: $mat-row-horizontal-padding;

  [dir='rtl'] & {
    padding-left: 0;
    padding-right: $mat-row-horizontal-padding;
  }
}

mat-cell:last-of-type, mat-header-cell:last-of-type, mat-footer-cell:last-of-type {
  padding-right: $mat-row-horizontal-padding;

  [dir='rtl'] & {
    padding-right: 0;
    padding-left: $mat-row-horizontal-padding;
  }
}

mat-cell, mat-header-cell, mat-footer-cell {
  flex: 1;
  display: flex;
  align-items: center;
  overflow: hidden;
  word-wrap: break-word;
  min-height: inherit;
}

/**
 * Native HTML table structure
 */
table.mat-table {
  border-spacing: 0;
}

tr.mat-header-row {
  height: $mat-header-row-height;
}

tr.mat-row, tr.mat-footer-row {
  height: $mat-row-height;
}

th.mat-header-cell {
  text-align: left;

  [dir='rtl'] & {
    text-align: right;
  }
}

th.mat-header-cell, td.mat-cell, td.mat-footer-cell {
  padding: 0;
  border-bottom-width: 1px;
  border-bottom-style: solid;
}

// Note: we use `first-of-type`/`last-of-type` here in order to prevent extra
// elements like ripples or badges from throwing off the layout (see #11165).
th.mat-header-cell:first-of-type, td.mat-cell:first-of-type, td.mat-footer-cell:first-of-type {
  padding-left: $mat-row-horizontal-padding;

  [dir='rtl'] & {
    padding-left: 0;
    padding-right: $mat-row-horizontal-padding;
  }
}

th.mat-header-cell:last-of-type, td.mat-cell:last-of-type, td.mat-footer-cell:last-of-type {
  padding-right: $mat-row-horizontal-padding;

  [dir='rtl'] & {
    padding-right: 0;
    padding-left: $mat-row-horizontal-padding;
  }
}
