All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.components.Table.table.scss Maven / Gradle / Ivy

The newest version!
@use '../../sass-utilities' as *;

// TODO: clean up unused variables
// TODO: update grouping comments to // * Table {element}

@include pf-root($table) {
  --#{$table}--BackgroundColor: var(--pf-t--global--background--color--primary--default);
  --#{$table}--BorderColor: var(--pf-t--global--border--color--default);
  --#{$table}--border-width--base: var(--pf-t--global--border--width--divider--default);

  // * Table caption
  --#{$table}__caption--FontSize: var(--pf-t--global--font--size--body--default);
  --#{$table}__caption--Color: var(--pf-t--global--text--color--subtle);
  --#{$table}__caption--PaddingBlockStart: var(--pf-t--global--spacer--md);
  --#{$table}__caption--PaddingInlineEnd: var(--pf-t--global--spacer--lg);
  --#{$table}__caption--PaddingBlockEnd: var(--pf-t--global--spacer--md);
  --#{$table}__caption--PaddingInlineStart: var(--pf-t--global--spacer--inset--page-chrome);

  // * Table thead cell
  --#{$table}__thead--cell--FontSize: var(--pf-t--global--font--size--body--sm);
  --#{$table}__thead--cell--FontWeight: var(--pf-t--global--font--weight--body--bold);

  // * Table thead toggle
  --#{$table}__thead__toggle--PaddingBlockEnd: var(--pf-t--global--spacer--xs);

  // * Table body cell
  --#{$table}__tbody--cell--PaddingBlockStart: var(--#{$table}--cell--Padding--base);
  --#{$table}__tbody--cell--PaddingBlockEnd: var(--#{$table}--cell--Padding--base);
  --#{$table}__tbody--cell--FontSize: var(--pf-t--global--font--size--body--default); // set this explicitly for input heights to calc properly

  // * Table tr
  --#{$table}__tr--BorderBlockEndWidth: var(--pf-t--global--border--width--divider--default);
  --#{$table}__tr--BorderBlockEndColor: var(--pf-t--global--border--color--default);

  // TODO: update these in order of appearance in scss declarations

  // * Table cell
  --#{$table}--cell--Padding--base: var(--pf-t--global--spacer--md);
  --#{$table}--cell--PaddingBlockStart: var(--#{$table}--cell--Padding--base);
  --#{$table}--cell--PaddingInlineEnd: var(--#{$table}--cell--Padding--base);
  --#{$table}--cell--PaddingBlockEnd: var(--#{$table}--cell--Padding--base);
  --#{$table}--cell--PaddingInlineStart: var(--#{$table}--cell--Padding--base);
  --#{$table}--cell--FontSize: var(--pf-t--global--font--size--body--default);
  --#{$table}--cell--FontWeight: var(--pf-t--global--font--weight--body--default);
  --#{$table}--cell--LineHeight: var(--pf-t--global--font--line-height--body);
  --#{$table}--cell--Color: var(--pf-t--global--text--color--regular);
  --#{$table}--cell--first-last-child--PaddingInline: var(--pf-t--global--spacer--inset--page-chrome);
  --#{$table}__tr--m-first-cell-offset-reset--cell--PaddingInlineStart: var(--#{$table}--cell--Padding--base);

  // * Table cell - default variables
  --#{$table}--cell--MinWidth: 0;
  --#{$table}--cell--MaxWidth: none;
  --#{$table}--cell--Width: auto;
  --#{$table}--cell--Overflow: visible;
  --#{$table}--cell--TextOverflow: clip;
  --#{$table}--cell--WhiteSpace: normal;
  --#{$table}--cell--WordBreak: normal;

  // * Table cell border right
  --#{$table}--cell--m-border-right--before--BorderInlineEndWidth: var(--pf-t--global--border--width--divider--default);
  --#{$table}--cell--m-border-right--before--BorderInlineEndColor: var(--pf-t--global--border--color--default);
  --#{$table}--cell--m-border-left--before--BorderInlineStartWidth: var(--pf-t--global--border--width--divider--default);
  --#{$table}--cell--m-border-left--before--BorderInlineStartColor: var(--pf-t--global--border--color--default);

  // * Table help
  --#{$table}--cell--m-help--MinWidth: 11ch;

  // * Table truncate
  --#{$table}--m-truncate--cell--MaxWidth: 1px;
  --#{$table}--m-truncate--cell--MinWidth: calc(5ch + var(--#{$table}--cell--PaddingInlineEnd) + var(--#{$table}--cell--PaddingInlineStart));

  // * Table truncate
  --#{$table}--m-truncate__text--MinWidth: 5ch;

  // * Table cell hidden visible
  --#{$table}--cell--hidden-visible--Display: table-cell;

  // * Table toggle
  --#{$table}__toggle--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$table}__toggle--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$table}__toggle--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$table}__toggle--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
  --#{$table}__toggle--c-button__toggle-icon--Rotate: 270deg;
  --#{$table}__toggle--c-button__toggle-icon--TransitionDuration: var(--pf-t--global--motion--duration--icon--long);
  --#{$table}__toggle--c-button__toggle-icon--TransitionTimingFunction: var(--pf-t--global--motion--timing-function--default);
  --#{$table}__toggle--c-button--m-expanded__toggle-icon--Rotate: 360deg;

  // * Table button
  --#{$table}__button--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$table}__button--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$table}__button--PaddingInlineStart: var(--pf-t--global--spacer--md);
  --#{$table}__button--PaddingInlineEnd: var(--pf-t--global--spacer--md);
  --#{$table}__button--Color: var(--pf-t--global--text--color--regular);
  --#{$table}__button--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$table}__button--OutlineOffset: calc(var(--pf-t--global--border--width--strong) * -1);
  --#{$table}__button--BorderRadius: var(--pf-t--global--border--radius--small);
  --#{$table}__button--hover--Color: var(--pf-t--global--text--color--regular);
  --#{$table}__button--hover--BackgroundColor: var(--pf-t--global--background--color--action--plain--hover);

  // * Table check
  --#{$table}__check--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$table}__check--PaddingInlineEnd: var(--pf-t--global--spacer--sm);

  // * Table favorite
  --#{$table}__favorite--c-button--FontSize: var(--pf-t--global--font--size--body--default);
  --#{$table}--cell--m-favorite--Color: var(--pf-t--global--text--color--subtle);
  --#{$table}__favorite--m-favorited--c-button--Color: var(--pf-t--global--color--favorite--clicked);

  // * Table ghost row
  --#{$table}__tr--m-ghost-row--Opacity: .4;
  --#{$table}__tr--m-ghost-row--BackgroundColor: var(--pf-t--global--background--color--primary--default);

  // * Table action
  --#{$table}__action--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$table}__action--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$table}__action--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$table}__action--PaddingInlineEnd: var(--pf-t--global--spacer--sm);

  // * Table expandable row content
  --#{$table}__expandable-row-content--PaddingBlockStart: var(--pf-t--global--spacer--md);
  --#{$table}__expandable-row-content--PaddingBlockEnd: var(--pf-t--global--spacer--md);
  --#{$table}__expandable-row-content--PaddingInlineStart: var(--pf-t--global--spacer--md);
  --#{$table}__expandable-row-content--PaddingInlineEnd: var(--pf-t--global--spacer--md);
  --#{$table}__expandable-row-content--BorderRadius: var(--pf-t--global--border--radius--small);
  --#{$table}__expandable-row-content--BackgroundColor: var(--pf-t--global--background--color--primary--default);

  // * Table control row
  --#{$table}__control-row--BackgroundColor: var(--pf-t--global--background--color--primary--default);
  --#{$table}__control-row--BorderBlockEndWidth: var(--pf-t--global--border--width--divider--default);
  --#{$table}__control-row__tbody--BorderBlockEndColor: var(--pf-t--global--border--color--default);

  // * Table icon inline
  --#{$table}__icon-inline--MarginInlineEnd: var(--pf-t--global--spacer--sm);

  // * Table sort cell
  --#{$table}__sort--MinWidth: calc(6ch + var(--#{$table}--cell--PaddingInlineEnd) + var(--#{$table}--cell--PaddingInlineStart) + var(--#{$table}__sort-indicator--MarginInlineStart));
  --#{$table}__sort--m-selected__button--Color: var(--pf-t--global--color--brand--clicked);
  --#{$table}__sort--m-help--MinWidth: 15ch;

  // * Table sort button
  --#{$table}__sort__button__text--Color: currentcolor;
  --#{$table}__sort__button--hover__text--Color: currentcolor;

  // * Table sort indicator
  --#{$table}__sort-indicator--Color: var(--pf-t--global--icon--color--subtle);
  --#{$table}__sort-indicator--MarginInlineStart: var(--pf-t--global--spacer--md);
  --#{$table}__sort--m-selected__sort-indicator--Color: var(--pf-t--global--color--brand--clicked);
  --#{$table}__sort__button--hover__sort-indicator--Color: var(--pf-t--global--text--color--regular);

  // * Table help
  --#{$table}__th--m-help--MinWidth: 11ch;

  // * Table header popover
  --#{$table}__column-help--MarginInlineStart: var(--pf-t--global--spacer--sm);

  // * Table compound expansion toggle button
  --#{$table}__compound-expansion-toggle__button--Color: var(--pf-t--global--icon--color--brand--default);
  --#{$table}__compound-expansion-toggle__button--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$table}__compound-expansion-toggle__button--hover--Color: var(--pf-t--global--icon--color--brand--hover);
  --#{$table}__compound-expansion-toggle__button--hover--BackgroundColor: var(--pf-t--global--background--color--action--plain--hover);
  --#{$table}__compound-expansion-toggle__button--expanded--BackgroundColor: var(--pf-t--global--background--color--action--plain--clicked);

  // * Table compound expansion toggle button after
  --#{$table}__compound-expansion-toggle__button--after--BorderColor: var(--pf-t--global--border--color--clicked);
  --#{$table}__compound-expansion-toggle__button--after--BorderBlockStartWidth: 0;
  --#{$table}__compound-expansion-toggle__button--hover--after--BorderBlockStartWidth: var(--pf-t--global--border--width--strong);
  --#{$table}__compound-expansion-toggle--m-expanded__button--after--BorderBlockStartWidth: var(--pf-t--global--border--width--strong);

  // * Compound expandable
  --#{$table}--compound-expansion--m-expanded--BackgroundColor: var(--pf-t--global--background--color--primary--clicked);

  // * Table compact th
  --#{$table}--m-compact__th--PaddingBlockStart: calc(var(--pf-t--global--spacer--sm) + var(--pf-t--global--spacer--xs));
  --#{$table}--m-compact__th--PaddingBlockEnd: var(--pf-t--global--spacer--sm);

  // * Table compact cell
  --#{$table}--m-compact--cell--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$table}--m-compact--cell--PaddingBlockEnd: var(--pf-t--global--spacer--sm);

  // * Table compact action
  --#{$table}--m-compact__action--PaddingBlockStart: var(--pf-t--global--spacer--xs);
  --#{$table}--m-compact__action--PaddingBlockEnd: var(--pf-t--global--spacer--xs);

  // * Table expandable row expanded
  --#{$table}__expandable-row--m-expanded--BorderBlockEndColor: var(--pf-t--global--border--color--default);

  // * Table tr clickable
  --#{$table}__tr--m-clickable--BackgroundColor: transparent;
  --#{$table}__tr--m-clickable--OutlineOffset: calc(-1 * var(--pf-t--global--spacer--xs));
  --#{$table}__tr--m-clickable--hover--BackgroundColor: var(--pf-t--global--background--color--primary--hover);

  // * Table tr selected
  --#{$table}__tr--m-selected--BackgroundColor: var(--pf-t--global--background--color--primary--clicked);
  --#{$table}__tr--m-selected--OutlineOffset: calc(-1 * var(--pf-t--global--spacer--xs));

  // * Table tbody clickable
  --#{$table}__tbody--m-clickable--BackgroundColor: transparent;
  --#{$table}__tbody--m-clickable--OutlineOffset: calc(-1 * var(--pf-t--global--spacer--xs));
  --#{$table}__tbody--m-clickable--hover--BackgroundColor: var(--pf-t--global--background--color--primary--hover);
  --#{$table}__tbody--m-clickable--m-expanded--BackgroundColor: var(--pf-t--global--background--color--primary--clicked);

  // * Table tbody selected
  --#{$table}__tbody--m-selected--BackgroundColor: var(--pf-t--global--background--color--primary--clicked);
  --#{$table}__tbody--m-selected--OutlineOffset: calc(-1 * var(--pf-t--global--spacer--xs));

  // * Table nested column header
  --#{$table}__thead--m-nested-column-header--button--OutlineOffset: #{pf-size-prem(-3px)};
  --#{$table}__thead--m-nested-column-header__tr--PaddingBlockStart: var(--pf-t--global--spacer--xs);
  --#{$table}__thead--m-nested-column-header__tr--PaddingBlockEnd: var(--pf-t--global--spacer--md);

  // * Table subhead
  --#{$table}__subhead--Color: var(--pf-t--global--text--color--subtle);

  // * Table subhead button
  --#{$table}__nested-column-header__button--PaddingInlineStart: calc(var(--#{$table}__button--PaddingInlineStart) - var(--pf-t--global--spacer--control--horizontal--plain));
  --#{$table}__nested-column-header__button--PaddingInlineEnd: calc(var(--#{$table}__button--PaddingInlineEnd) - (var(--pf-t--global--spacer--control--horizontal--plain) / 2));

  // * Table striped
  --#{$table}--m-striped__tr--BackgroundColor: var(--pf-t--global--background--color--secondary--default);

  // * Table sticky header
  --#{$table}--m-sticky-header--cell--ZIndex: var(--pf-t--global--z-index--xs);
  --#{$table}--m-sticky-header--ZIndex: calc(var(--pf-t--global--z-index--xs) + 1);
  --#{$table}--m-sticky-header--border--ZIndex: calc(var(--pf-t--global--z-index--xs) + 2);
}

// TODO: update grouping comments to // Table {element}
// TODO: flatten the modifiers out ex: .#{$table}.pf-m-sticky-header {}
// - Table
.#{$table} {
  width: 100%;
  background-color: var(--#{$table}--BackgroundColor);

  &.pf-m-fixed {
    table-layout: fixed;
  }

  // - Table sticky header
  &.pf-m-sticky-header > .#{$table}__thead,
  .#{$table}__thead.pf-m-nested-column-header {
    position: sticky;
    inset-block-start: 0;
    z-index: var(--#{$table}--m-sticky-header--ZIndex);
    background: var(--#{$table}--BackgroundColor);

    &::before {
      position: absolute;
      inset-block-start: 0;
      inset-block-end: 0;
      inset-inline-start: 0;
      inset-inline-end: 0;
      z-index: var(--#{$table}--m-sticky-header--border--ZIndex);
      pointer-events: none;
      content: '';
      border-block-end: var(--#{$table}--border-width--base) solid var(--#{$table}--BorderColor);
    }
  }

  &.pf-m-sticky-header {
    position: relative;

    thead:where(.#{$table}__thead) tr:where(.#{$table}__tr) {
      > :where(th, td) {
        z-index: var(--#{$table}--m-sticky-header--cell--ZIndex); // set z-index here to allow sticky column to override
      }
    }

    // - Table nested column header
    > .pf-m-nested-column-header {
      position: sticky;
      inset-block-start: 0;
      background: var(--#{$table}--BackgroundColor);
    }
  }

  // - Table not sticky header nested column header
  &:not(.pf-m-sticky-header) > .pf-m-nested-column-header {
    tr:where(.#{$table}__tr):not(:last-child) {
      border-block-end: 0; // hard reset tr borders in nested headers

      // stylelint-disable max-nesting-depth
      th:where(.#{$table}__th),
      td:where(.#{$table}__td) {
        &:not([rowspan]) {
          --#{$table}--cell--PaddingBlockEnd: var(--#{$table}__thead--m-nested-column-header__tr--PaddingBlockEnd);
        }
      }
      // stylelint-enable
    }
  }

  // - Table striped
  // stylelint-disable
  &.pf-m-striped:not(.pf-m-expandable) > tbody:where(.#{$table}__tbody) > tr:where(.#{$table}__tr):nth-child(odd), // regular table
  &.pf-m-striped.pf-m-expandable > tbody:where(.#{$table}__tbody):nth-of-type(odd) > tr:where(.#{$table}__tr), // expandable table
  > .pf-m-striped > tr:nth-child(odd), // tbody odd
  > .pf-m-striped-even > tr:nth-child(even), // tbody even
  tr:where(.#{$table}__tr).pf-m-striped { // tr
    --#{$table}__sticky-column--BackgroundColor: var(--#{$table}--m-striped__tr--BackgroundColor);

    background: var(--#{$table}--m-striped__tr--BackgroundColor);
  }
  // stylelint-enable

  // Standard table row (non-expandable)
  // exclude expandable rows
  tr:where(.#{$table}__tr):not(.#{$table}__expandable-row) {
    // stylelint-disable-next-line
    &.pf-m-ghost-row {
      background-color: var(--#{$table}__tr--m-ghost-row--BackgroundColor);
      opacity: var(--#{$table}__tr--m-ghost-row--Opacity);
    }
  }

  // - Table th - Table td
  tr:where(.#{$table}__tr) > :where(th, td) {
    @include pf-v6-hidden-visible(var(--#{$table}--cell--hidden-visible--Display));

    position: relative;
    width: var(--#{$table}--cell--Width);
    min-width: var(--#{$table}--cell--MinWidth);
    max-width: var(--#{$table}--cell--MaxWidth);
    padding-block-start: var(--#{$table}--cell--PaddingBlockStart);
    padding-block-end: var(--#{$table}--cell--PaddingBlockEnd);
    padding-inline-start: var(--#{$table}--cell--PaddingInlineStart);
    padding-inline-end: var(--#{$table}--cell--PaddingInlineEnd);

    // default settings
    overflow: var(--#{$table}--cell--Overflow);
    font-size: var(--#{$table}--cell--FontSize);
    font-weight: var(--#{$table}--cell--FontWeight);
    line-height: var(--#{$table}--cell--LineHeight);
    color: var(--#{$table}--cell--Color);
    text-overflow: var(--#{$table}--cell--TextOverflow);
    word-break: var(--#{$table}--cell--WordBreak);
    white-space: var(--#{$table}--cell--WhiteSpace);

    // First child padding left
    &:first-child {
      padding-inline-start: var(--#{$table}--cell--first-last-child--PaddingInline);
    }

    // Last child padding right
    &:last-child {
      padding-inline-end: var(--#{$table}--cell--first-last-child--PaddingInline);
    }

    &.pf-m-center {
      text-align: center;
    }

    &:is(:empty, .#{$table}__cell-empty) {
      width: auto;
      min-width: 0;
      padding: 0;
    }

    &.pf-m-help {
      --#{$table}--cell--MinWidth: var(--#{$table}--cell--m-help--MinWidth);
    }

    &.pf-m-favorite {
      --#{$table}__button--Color: var(--#{$table}--cell--m-favorite--Color);
      --#{$table}__sort--MinWidth: fit-content;
      --#{$table}--cell--MaxWidth: fit-content;
      --#{$table}--cell--Overflow: visible;
    }

    &.pf-m-border-right::before,
    &.pf-m-border-left::before {
      position: absolute;
      inset: 0;
      pointer-events: none;
      content: "";
    }

    &.pf-m-border-right::before {
      border-inline-end: var(--#{$table}--cell--m-border-right--before--BorderInlineEndWidth) solid var(--#{$table}--cell--m-border-right--before--BorderInlineEndColor);
    }

    &.pf-m-border-left::before {
      border-inline-start: var(--#{$table}--cell--m-border-left--before--BorderInlineStartWidth) solid var(--#{$table}--cell--m-border-left--before--BorderInlineStartColor);
    }
  }

  // - Table caption
  caption:where(.#{$table}__caption) {
    padding-block-start: var(--#{$table}__caption--PaddingBlockStart);
    padding-block-end: var(--#{$table}__caption--PaddingBlockEnd);
    padding-inline-start: var(--#{$table}__caption--PaddingInlineStart);
    font-size: var(--#{$table}__caption--FontSize);
    color: var(--#{$table}__caption--Color);
    text-align: start;
    background-color: var(--#{$table}--BackgroundColor);
  }

  // - Table thead
  thead:where(.#{$table}__thead) {
    --#{$table}--cell--FontSize: var(--#{$table}__thead--cell--FontSize);
    --#{$table}--cell--FontWeight: var(--#{$table}__thead--cell--FontWeight);
    --#{$table}--cell--MinWidth: var(--#{$table}--m-truncate--cell--MinWidth);
    --#{$table}--cell--MaxWidth: var(--#{$table}--m-truncate--cell--MaxWidth);
    --#{$table}--cell--Overflow: hidden;
    --#{$table}--cell--TextOverflow: ellipsis;
    --#{$table}--cell--WhiteSpace: nowrap;

    // stylelint-disable
    &.pf-m-nested-column-header {
      button:where(.#{$button}) {
        outline-offset: var(--#{$table}__thead--m-nested-column-header--button--OutlineOffset);
      }

      tr:where(.#{$table}__tr):not(:first-child) {
        th:where(.#{$table}__th),
        td:where(.#{$table}__td) {
          &:not([rowspan]) {
            --#{$table}--cell--PaddingBlockStart: var(--#{$table}__thead--m-nested-column-header__tr--PaddingBlockStart);
          }
        }
      }
    }
    // stylelint-enable

    // - Table subhead
    .#{$table}__subhead {
      --#{$table}__sort__button__text--Color: var(--#{$table}__subhead--Color);

      color: var(--#{$table}__subhead--Color);
    }
  }

  // - Table tbody
  // stylelint-disable
  tbody:where(.#{$table}__tbody) {
    --#{$table}--cell--PaddingBlockStart: var(--#{$table}__tbody--cell--PaddingBlockStart);
    --#{$table}--cell--PaddingBlockEnd: var(--#{$table}__tbody--cell--PaddingBlockEnd);
    --#{$table}--cell--FontSize: var(--#{$table}__tbody--cell--FontSize);

    > tr:where(.#{$table}__tr) > :where(th, td) {
      overflow-wrap: break-word;
    }
  }
  // stylelint-enable

  // REMOVE PADDING FOR SPECIAL CELLS THAT CONTAIN BUTTONS
  // ==================================================================
  // unset padding, button adds appropriate padding
  // unset padding for these cells as the button within provides padding
  // .#{$table}__compound-expansion-toggle {
  //   &,
  //   &:first-child,
  //   &:last-child {
  //     // explicitly reset padding rather than css variable, as the button within uses the variable
  //     padding: 0;
  //   }
  // }

  // - Table sort
  // set property here to increase specificity
  .#{$table}__sort {
    min-width: var(--#{$table}__sort--MinWidth);
  }

  :where(.#{$table}__th, .#{$table}__td) {
    &.pf-m-help {
      min-width: var(--#{$table}__th--m-help--MinWidth);
    }
  }

  // stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors
  &.pf-m-no-border-rows > tbody:where(.#{$table}__tbody) {
    --#{$table}__tr--BorderBlockEndWidth: 0;
    --#{$table}__tbody--BorderBlockEndWidth: 0;
    --#{$table}--m-expandable__tbody--BorderBlockEndWidth: 0;
    --#{$table}__control-row--BorderBlockEndWidth: 0;

    > tr:where(.#{$table}__tr) {
      border-block-end: 0;
    }

    &:not(.pf-m-expanded) .#{$table}__compound-expansion-toggle .#{$table}__button::before {
      display: none;
    }
  }

  tr.pf-m-clickable:last-child {
    border-block-end-color: transparent;
  }

  // - Table tr clickable
  tr:where(.#{$table}__tr) {
    &.pf-m-clickable {
      cursor: pointer;
      background-color: var(--#{$table}__tr--m-clickable--BackgroundColor);
      outline-offset: var(--#{$table}__tr--m-clickable--OutlineOffset);

      &:is(:hover, :focus) {
        --#{$table}__tr--m-clickable--BackgroundColor: var(--#{$table}__tr--m-clickable--hover--BackgroundColor);
      }
    }

    // tr selected
    &.pf-m-selected {
      position: relative;
      background-color: var(--#{$table}__tr--m-selected--BackgroundColor);
      outline-offset: var(--#{$table}__tr--m-selected--OutlineOffset);
    }

    &.pf-m-first-cell-offset-reset > :first-child {
      padding-inline-start: var(--#{$table}__tr--m-first-cell-offset-reset--cell--PaddingInlineStart);
    }
  }

  // - Table tbody clickable
  // stylelint-disable no-duplicate-selectors
  tbody:where(.#{$table}__tbody) {
    &.pf-m-clickable {
      cursor: pointer;
      background-color: var(--#{$table}__tbody--m-clickable--BackgroundColor);
      outline-offset: var(--#{$table}__tbody--m-clickable--OutlineOffset);

      &:is(:hover, :focus) {
        --#{$table}__tbody--m-clickable--BackgroundColor: var(--#{$table}__tbody--m-clickable--hover--BackgroundColor);
      }

      &.pf-m-expanded {
        --#{$table}__tbody--m-clickable--BackgroundColor: var(--#{$table}__tbody--m-clickable--m-expanded--BackgroundColor);
      }
    }

    // - Table tbody expanded
    &.pf-m-selected {
      background-color: var(--#{$table}__tbody--m-selected--BackgroundColor);
      outline-offset: var(--#{$table}__tbody--m-selected--OutlineOffset);

      .#{$table}__tr.pf-m-expanded:not(.#{$table}__expandable-row) {
        border: none;
      }
    }
  }

  &.pf-m-drag-over {
    overflow-anchor: none;
  }

  // - Table table
  .#{$table}{
    background-color: transparent;

    &,
    :is(.#{$table}__tbody, .#{$table}__tr:last-child) {
      border-block-end: 0;
    }
  }

  .#{$button} .#{$table}__sort-indicator {
    --#{$table}__sort-indicator--MarginInlineStart: 0;
  }
}

// - Table truncate - Table wrap - Table nowrap - Table fit content - Table wrap - Table break word
[class*='#{$table}'] {
  &.pf-m-truncate {
    --#{$table}--cell--MinWidth: var(--#{$table}--m-truncate--cell--MinWidth);
    --#{$table}--cell--MaxWidth: var(--#{$table}--m-truncate--cell--MaxWidth);
    --#{$table}--cell--Overflow: hidden;
    --#{$table}--cell--TextOverflow: ellipsis;
    --#{$table}--cell--WhiteSpace: nowrap;
  }

  &.pf-m-wrap {
    --#{$table}--cell--MinWidth: 0;
    --#{$table}--cell--MaxWidth: none;
    --#{$table}--cell--Overflow: visible;
    --#{$table}--cell--TextOverflow: clip;
    --#{$table}--cell--WhiteSpace: normal;
  }

  &.pf-m-nowrap {
    --#{$table}--cell--MinWidth: 0;
    --#{$table}--cell--MaxWidth: none;
    --#{$table}--cell--Overflow: visible;
    --#{$table}--cell--TextOverflow: clip;
    --#{$table}--cell--WhiteSpace: nowrap;
  }

  .#{$table}__icon,
  &.pf-m-fit-content {
    --#{$table}--cell--MinWidth: fit-content;
    --#{$table}--cell--MaxWidth: none;
    --#{$table}--cell--Width: 1%;
    --#{$table}--cell--Overflow: visible;
    --#{$table}--cell--TextOverflow: clip;
    --#{$table}--cell--WhiteSpace: nowrap;
  }

  &.pf-m-break-word {
    --#{$table}--cell--WordBreak: break-word;
    --#{$table}--cell--WhiteSpace: normal;
  }
}

// - Table text
.#{$table}__text {
  --#{$table}--cell--MaxWidth: 100%;

  position: relative;
  display: block;
  width: var(--#{$table}--cell--Width);
  min-width: var(--#{$table}--text--MinWidth);
  max-width: var(--#{$table}--cell--MaxWidth);
  overflow: var(--#{$table}--cell--Overflow);
  line-height: var(--#{$table}--cell--LineHeight);
  text-overflow: var(--#{$table}--cell--TextOverflow);
  word-break: var(--#{$table}--cell--WordBreak);
  white-space: var(--#{$table}--cell--WhiteSpace);

  // Only apply these settings if specifically modified
  &.pf-m-truncate {
    --#{$table}--cell--MinWidth: 100%;
    --#{$table}--text--MinWidth: var(--#{$table}--m-truncate__text--MinWidth);

    > :where(th, td) {
      overflow: var(--#{$table}--cell--Overflow);
      text-overflow: var(--#{$table}--cell--TextOverflow);
      white-space: var(--#{$table}--cell--WhiteSpace);
    }
  }
}

// - Table button
.#{$table}__button {
  width: auto;
  padding-block-start: var(--#{$table}__button--PaddingBlockStart);
  padding-block-end: var(--#{$table}__button--PaddingBlockEnd);
  padding-inline-start: var(--#{$table}__button--PaddingInlineStart);
  padding-inline-end: var(--#{$table}__button--PaddingInlineEnd);
  margin-block-end: calc(var(--#{$table}__button--PaddingBlockEnd) * -1);
  margin-inline-start: calc(var(--#{$table}__button--PaddingInlineStart) * -1);
  font-size: inherit;
  font-weight: inherit;
  color: var(--#{$table}__button--Color);
  text-align: start;
  white-space: inherit;
  user-select: text;
  background-color: var(--#{$table}__button--BackgroundColor);
  border: 0;
  border-radius: var(--#{$table}__button--BorderRadius);
  outline-offset: var(--#{$table}__button--OutlineOffset);

  // Table table table button
  .#{$table} .#{$table} & {
    margin-block-end: 0; // remove offset in nested tables
  }

  &:is(:hover, :focus) {
    color: var(--#{$table}__button--hover--Color);
  }
}

// - Table sort - Table compound expansion toggle
.#{$table}__sort,
.#{$table}__compound-expansion-toggle {
  // Pass properties to text
  .#{$table}__text {
    display: block;
    width: auto;
    overflow: var(--#{$table}--cell--Overflow);
    text-overflow: var(--#{$table}--cell--TextOverflow);
    white-space: var(--#{$table}--cell--WhiteSpace);
  }
}

// - Table button content - Table column help
// display grid for buttons is not supported
.#{$table}__button-content,
.#{$table}__column-help {
  display: inline-grid;
  grid-template-columns: auto max-content;
  align-items: last baseline;
  justify-content: start;

  .#{$table}__text {
    min-width: auto;
  }

  .#{$table} thead:where(.#{$table}__thead).pf-m-nowrap &,
  .#{$table} tr:where(.#{$table}__tr).pf-m-nowrap &,
  .#{$table} th:where(.#{$table}__th).pf-m-nowrap & {
    grid-template-columns: min-content max-content;
  }

  .#{$table} thead:where(.#{$table}__thead).pf-m-fit-content &,
  .#{$table} tr:where(.#{$table}__tr).pf-m-fit-content &,
  .#{$table} th:where(.#{$table}__th).pf-m-fit-content & {
    grid-template-columns: fit-content max-content;
  }

  .#{$table} thead:where(.#{$table}__thead).pf-m-wrap &,
  .#{$table} tr:where(.#{$table}__tr).pf-m-wrap &,
  .#{$table} th:where(.#{$table}__th).pf-m-wrap &,
  .#{$table} thead:where(.#{$table}__thead).pf-m-truncate &,
  .#{$table} tr:where(.#{$table}__tr).pf-m-truncate &,
  .#{$table} th:where(.#{$table}__th).pf-m-truncate & {
    grid-template-columns: auto max-content;
  }
}

// stylelint-disable
// - Table check - Table toggle - Table action - Table favorite - Table inline-edit-action - Table draggable
.#{$table} .#{$table}__check,
.#{$table} .#{$table}__toggle,
.#{$table} .#{$table}__action,
.#{$table} .#{$table}__inline-edit-action,
.#{$table} .#{$table}__draggable {
  --#{$table}--cell--MinWidth: 0;
  --#{$table}--cell--Width: 1%;
}
// stylelint-enable

.#{$table} .#{$table}__favorite {
  --#{$table}--cell--MaxWidth: auto;
}

// - Table toggle
.#{$table}__toggle {
  --#{$table}--cell--PaddingBlockStart: var(--#{$table}__toggle--PaddingBlockStart);
  --#{$table}--cell--PaddingBlockEnd: var(--#{$table}__toggle--PaddingBlockEnd);
  --#{$table}--cell--PaddingInlineStart: var(--#{$table}__toggle--PaddingInlineStart);
  --#{$table}--cell--PaddingInlineEnd: var(--#{$table}__toggle--PaddingInlineEnd);

  .#{$button} {
    &.pf-m-expanded .#{$table}__toggle-icon {
      transform: rotate(var(--#{$table}__toggle--c-button--m-expanded__toggle-icon--Rotate));
    }
  }


  .#{$table}__toggle-icon {
    @include pf-v6-mirror-inline-on-rtl;

    transition: transform var(--#{$table}__toggle--c-button__toggle-icon--TransitionDuration) var(--#{$table}__toggle--c-button__toggle-icon--TransitionTimingFunction);
    transform: rotate(var(--#{$table}__toggle--c-button__toggle-icon--Rotate));
  }

  svg {
    pointer-events: none;
  }
}

// - Table check
.#{$table}__check {
  --#{$table}--cell--PaddingInlineStart: var(--#{$table}__check--PaddingInlineStart);
  --#{$table}--cell--PaddingInlineEnd: var(--#{$table}__check--PaddingInlineEnd);

  vertical-align: top;

  .#{$check} {
    --#{$check}__label--FontSize: var(--#{$table}--cell--FontSize);
    --#{$check}__label--LineHeight: var(--#{$table}--cell--LineHeight);
  }

  .#{$radio} {
    --#{$radio}__label--FontSize: var(--#{$table}--cell--FontSize);
    --#{$radio}__label--LineHeight: var(--#{$table}--cell--LineHeight);
  }

  thead & {
    vertical-align: bottom;
  }

  .#{$check}.pf-m-standalone,
  .#{$radio}.pf-m-standalone {
    thead & {
      display: table-cell;
      height: auto;
      line-height: 1;
      vertical-align: baseline;
    }
  }
}

// - Table favorite
.#{$table}__favorite {
  .#{$button} {
    --#{$button}--FontSize: var(--#{$table}__favorite--c-button--FontSize);
  }

  &.pf-m-favorited .#{$button} {
    --#{$button}--m-plain__icon--Color: var(--#{$table}__favorite--m-favorited--c-button--Color);

    &:is(:hover, :focus) {
      --#{$button}--hover__icon--Color: var(--#{$table}__favorite--m-favorited--c-button--Color);
    }
  }
}

// - Table draggable
.#{$table}__draggable {
  .#{$button} {
    cursor: grab;

    &:active {
      cursor: grabbing;
    }
  }
}

// - Table action - Table favorite - Table inline edit action - Table draggable
.#{$table}__action,
.#{$table}__favorite,
.#{$table}__inline-edit-action,
.#{$table}__draggable {
  --#{$table}--cell--PaddingBlockStart: var(--#{$table}__action--PaddingBlockStart);
  --#{$table}--cell--PaddingBlockEnd: var(--#{$table}__action--PaddingBlockEnd);
  --#{$table}--cell--PaddingInlineStart: var(--#{$table}__action--PaddingInlineStart);
  --#{$table}--cell--PaddingInlineEnd: var(--#{$table}__action--PaddingInlineEnd);
}

// - Table action - Table inline edit action
.#{$table}__action,
.#{$table}__inline-edit-action {
  &:last-child {
    text-align: end;
  }
}

// - Table compound expansion toggle
.#{$table}__compound-expansion-toggle {
  --#{$table}__button--Color: var(--#{$table}__compound-expansion-toggle__button--Color);
  --#{$table}__button--hover--Color: var(--#{$table}__compound-expansion-toggle__button--hover--Color);

  position: relative;
  padding: 0;
  background-color: var(--#{$table}__compound-expansion-toggle__button--BackgroundColor);

  // show left border, use __text to truncate content
  &.pf-m-truncate {
    overflow: visible;
  }

  .#{$table}__button {
    position: static;
    min-width: 100%;
    padding: 0;
    margin: 0;
    overflow: hidden;

    // Remove outline and apply to parent td
    &:is(:hover, :focus) {
      outline: 0;
    }
  }

  // Apply borders to button to avoid conflicts with expanded states
  .#{$table}__button::after {
    position: absolute;
    inset: 0;
    content: '';
    border: 0;
    border-block-start: var(--#{$table}__compound-expansion-toggle__button--after--BorderBlockStartWidth) solid var(--#{$table}__compound-expansion-toggle__button--after--BorderColor);
  }

  &:hover,
  &:focus-within {
    --#{$table}__compound-expansion-toggle__button--BackgroundColor: var(--#{$table}__compound-expansion-toggle__button--hover--BackgroundColor);
    --#{$table}__compound-expansion-toggle__button--after--BorderBlockStartWidth: var(--#{$table}__compound-expansion-toggle__button--hover--after--BorderBlockStartWidth);
  }

  &.pf-m-expanded {
    --#{$table}__compound-expansion-toggle__button--BackgroundColor: var(--#{$table}__compound-expansion-toggle__button--expanded--BackgroundColor);
    --#{$table}__compound-expansion-toggle__button--after--BorderBlockStartWidth: var(--#{$table}__compound-expansion-toggle--m-expanded__button--after--BorderBlockStartWidth);
  }

  &:focus-within {
    outline-offset: var(--#{$table}__button--OutlineOffset);

    // stylelint-disable media-feature-name-no-vendor-prefix
    @media (-webkit-min-device-pixel-ratio: 0) {
      outline-style: auto;
      outline-color: -webkit-focus-ring-color;
    }
    // stylelint-enable
  }
}

// - Table column help action
.#{$table}__column-help-action {
  align-self: last baseline;
  margin-inline-start: var(--#{$table}__column-help--MarginInlineStart);
}

// - Table sort
.#{$table}__sort {
  vertical-align: bottom;

  // - Table button
  .#{$table}__button {
    &:is(:hover, :focus) {
      --#{$table}__sort-indicator--Color: var(--#{$table}__sort__button--hover__sort-indicator--Color);
      --#{$table}__sort__button__text--Color: var(--#{$table}__sort__button--hover__text--Color);
      --#{$table}__button--BackgroundColor: var(--#{$table}__button--hover--BackgroundColor);
    }

    // - Table text
    .#{$table}__text {
      color: var(--#{$table}__sort__button__text--Color);
    }
  }

  &.pf-m-selected .#{$table}__button,
  &.pf-m-selected .#{$button} {
    --#{$table}__sort-indicator--Color: var(--#{$table}__sort--m-selected__sort-indicator--Color);

    // override state colors on text
    .#{$table}__text {
      color: var(--#{$table}__sort--m-selected__button--Color);
    }
  }

  &.pf-m-help {
    --#{$table}__th--m-help--MinWidth: var(--#{$table}__sort--m-help--MinWidth);
  }

  &.pf-m-favorite {
    .#{$table}__text {
      font-size: var(--#{$table}__favorite--c-button--FontSize);
    }
  }
}

// - Table sort indicator
.#{$table}__sort-indicator {
  grid-column: 2;
  align-self: end;
  margin-inline-start: var(--#{$table}__sort-indicator--MarginInlineStart); // TODO: update this to gap
  color: var(--#{$table}__sort-indicator--Color);
  pointer-events: none;
}

// - Table expandable row
.#{$table}__expandable-row {
  position: relative;
  border-block-end: 0 solid transparent;

  @at-root :not(.#{$table}__control-row) ~ .#{$table}__expandable-row {
    > .#{$table}__th,
    > .#{$table}__td {
      padding-block-start: 0;
    }
  }

  td:where(.#{$table}__td),
  th:where(.#{$table}__th) {
    &.pf-m-no-padding {
      padding-block-start: 0;
      padding-block-end: 0;
      padding-inline-start: 0;
      padding-inline-end: 0;

      .#{$table}__expandable-row-content {
        padding: 0;
      }
    }
  }

  // - Table expandable row content
  .#{$table}__expandable-row-content {
    padding-block-start: var(--#{$table}__expandable-row-content--PaddingBlockStart);
    padding-block-end: var(--#{$table}__expandable-row-content--PaddingBlockEnd);
    padding-inline-start: var(--#{$table}__expandable-row-content--PaddingInlineStart);
    padding-inline-end: var(--#{$table}__expandable-row-content--PaddingInlineEnd);
    background-color: var(--#{$table}__expandable-row-content--BackgroundColor);
    border-radius: var(--#{$table}__expandable-row-content--BorderRadius);
  }

  // - Table expandable row content expanded
  &.pf-m-expanded {
    border-block-end-color: var(--#{$table}__expandable-row--m-expanded--BorderBlockEndColor);
    border-block-end-width: var(--#{$table}--border-width--base);
  }

  &:not(.pf-m-expanded) {
    display: none;
  }

  // - Table expandable row tr last-child
  tr:last-child {
    border-block-end: 0;
  }
}

// - Table compact
.#{$table}.pf-m-compact {
  --#{$table}--cell--PaddingBlockStart: var(--#{$table}--m-compact--cell--PaddingBlockStart);
  --#{$table}--cell--PaddingBlockEnd: var(--#{$table}--m-compact--cell--PaddingBlockEnd);

  // - Table compact table tr
  tr:where(.#{$table}__tr) {
    &:not(.#{$table}__expandable-row) {
      --#{$table}--cell--PaddingBlockStart: var(--#{$table}--m-compact--cell--PaddingBlockStart);
      --#{$table}--cell--PaddingBlockEnd: var(--#{$table}--m-compact--cell--PaddingBlockEnd);
    }
  }

  // - Table compact thead
  thead:where(.#{$table}__thead) {
    th:where(.#{$table}__th),
    .#{$table}__toggle {
      --#{$table}--cell--PaddingBlockStart: var(--#{$table}--m-compact__th--PaddingBlockStart);
      --#{$table}--cell--PaddingBlockEnd: var(--#{$table}--m-compact__th--PaddingBlockEnd);
    }
  }

  .#{$table}__action,
  .#{$table}__favorite,
  .#{$table}__toggle,
  .#{$table}__draggable {
    --#{$table}--cell--PaddingBlockStart: var(--#{$table}--m-compact__action--PaddingBlockStart);
    --#{$table}--cell--PaddingBlockEnd: var(--#{$table}--m-compact__action--PaddingBlockEnd);
  }

  .#{$table}__icon {
    width: auto;
    min-width: 0;
    text-align: center;
  }
}

// - Table thead
.#{$table}__thead {
  --#{$table}__tr--BorderBlockEndWidth: 0;
  --#{$table}__toggle--PaddingBlockEnd: var(--#{$table}__thead__toggle--PaddingBlockEnd);

  vertical-align: bottom;

  // - Table nested column header button
  &.pf-m-nested-column-header {
    .#{$table}__button {
      --#{$table}__button--PaddingInlineStart: var(--#{$table}__nested-column-header__button--PaddingInlineStart);
      --#{$table}__button--PaddingInlineEnd: var(--#{$table}__nested-column-header__button--PaddingInlineEnd);

      // margin to align with thead padding
      margin-inline-end: calc(var(--#{$table}__button--PaddingInlineStart) * -1);
    }
  }
}

// - Table tbody
.#{$table}__tbody {
  vertical-align: top;

  // TODO: make this a class `compound expansion content`
  .#{$table}__control-row ~ .#{$table}__expandable-row.pf-m-expanded {
    background-color: var(--#{$table}--compound-expansion--m-expanded--BackgroundColor);
  }
}

// Table table tbody expandable
.#{$table}.pf-m-expandable {
  .#{$table}__tr.pf-m-expanded {
    border-block-end: 0;
  }

  // - Table tbody
  .#{$table}__tbody {
    border-block-end: var(--#{$table}__tr--BorderBlockEndWidth) solid var(--#{$table}__tr--BorderBlockEndColor);
  }

  // - Table tbody - Table tr
  .#{$table}__tbody.pf-m-expanded {
    border-block-end: var(--#{$table}__tr--BorderBlockEndWidth) solid var(--#{$table}__tr--BorderBlockEndColor);

    // - Table tbody table control row
    .#{$table}__control-row {
      background-color: var(--#{$table}__control-row--BackgroundColor);
      border-block-end: var(--#{$table}__control-row--BorderBlockEndWidth) solid var(--#{$table}__control-row__tbody--BorderBlockEndColor);
    }
  }
}

// - Table tr
.#{$table}__tr {
  border-block-end: var(--#{$table}__tr--BorderBlockEndWidth) solid var(--#{$table}__tr--BorderBlockEndColor);

  .#{$table}__thead & {
    border-block-end: 0;
  }

  &.pf-m-border-row {
    border-block-end: var(--#{$table}--border-width--base) solid var(--#{$table}--BorderColor);
  }
}

// - Table icon inline
.#{$table}__icon-inline {
  display: flex;
  align-items: center;

  > :not(:last-child) {
    margin-inline-end: var(--#{$table}__icon-inline--MarginInlineEnd);
  }
}

// - Table width
// stylelint-disable
.#{$table} .pf-m-width-10 {
  --#{$table}--cell--Width: 10%;
}

.#{$table} .pf-m-width-15 {
  --#{$table}--cell--Width: 15%;
}

.#{$table} .pf-m-width-20 {
  --#{$table}--cell--Width: 20%;
}

.#{$table} .pf-m-width-25 {
  --#{$table}--cell--Width: 25%;
}

.#{$table} .pf-m-width-30 {
  --#{$table}--cell--Width: 30%;
}

.#{$table} .pf-m-width-35 {
  --#{$table}--cell--Width: 35%;
}

.#{$table} .pf-m-width-40 {
  --#{$table}--cell--Width: 40%;
}

.#{$table} .pf-m-width-45 {
  --#{$table}--cell--Width: 45%;
}

.#{$table} .pf-m-width-50 {
  --#{$table}--cell--Width: 50%;
}

.#{$table} .pf-m-width-60 {
  --#{$table}--cell--Width: 60%;
}

.#{$table} .pf-m-width-70 {
  --#{$table}--cell--Width: 70%;
}

.#{$table} .pf-m-width-80 {
  --#{$table}--cell--Width: 80%;
}

.#{$table} .pf-m-width-90 {
  --#{$table}--cell--Width: 90%;
}

.#{$table} .pf-m-width-100 {
  --#{$table}--cell--Width: 100%;
}
// stylelint-enable




© 2015 - 2025 Weber Informatics LLC | Privacy Policy