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

package.components.Tabs.tabs.scss Maven / Gradle / Ivy

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

$pf-v6-c-tabs--breakpoint-map: build-breakpoint-map("base", "sm", "md", "lg", "xl", "2xl");
$pf-v6-c-tabs--spacer-map: build-spacer-map("none", "sm", "md", "lg", "xl", "2xl");

@include pf-root($tabs) {
  --#{$tabs}--inset: 0;
  --#{$tabs}--Width: auto;
  --#{$tabs}--before--BorderColor: var(--pf-t--global--border--color--default);
  --#{$tabs}--before--border-width--base: var(--pf-t--global--border--width--regular);
  --#{$tabs}--before--BorderBlockStartWidth: 0;
  --#{$tabs}--before--BorderInlineEndWidth: 0;
  --#{$tabs}--before--BorderBlockEndWidth: var(--#{$tabs}--before--border-width--base);
  --#{$tabs}--before--BorderInlineStartWidth: 0;
  --#{$tabs}--m-vertical--inset: var(--pf-t--global--spacer--sm);

  // Tabs, Page insets modifier
  --#{$tabs}--m-page-insets--inset: var(--pf-t--global--spacer--md);

  // Tabs, Vertical modifier
  --#{$tabs}--m-vertical--Width: 100%;
  --#{$tabs}--m-vertical--MaxWidth: #{pf-size-prem(250px)};
  --#{$tabs}--m-vertical--m-box--inset: var(--pf-t--global--spacer--md);
  --#{$tabs}--m-vertical__list--before--BorderColor: var(--#{$tabs}--before--BorderColor);
  --#{$tabs}--m-vertical__list--before--BorderBlockStartWidth: 0;
  --#{$tabs}--m-vertical__list--before--BorderInlineEndWidth: 0;
  --#{$tabs}--m-vertical__list--before--BorderBlockEndWidth: 0;
  --#{$tabs}--m-vertical__list--before--BorderInlineStartWidth: var(--#{$tabs}--before--border-width--base);

  // Tabs List
  --#{$tabs}__list--Display: flex;

  // Tabs Item
  --#{$tabs}__item--BackgroundColor: transparent;
  --#{$tabs}__item--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__item--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__item--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__item--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__item--ColumnGap: var(--pf-t--global--spacer--xs);
  --#{$tabs}--m-vertical__item--PaddingInlineStart: var(--pf-t--global--spacer--md);
  --#{$tabs}--m-vertical__item--PaddingInlineEnd: var(--pf-t--global--spacer--md);
  --#{$tabs}__item--m-current--BackgroundColor: transparent;
  --#{$tabs}--m-box__item--BackgroundColor: var(--pf-t--global--background--color--secondary--default);
  --#{$tabs}--m-box__item--m-current--BackgroundColor: var(--pf-t--global--background--color--primary--default);
  --#{$tabs}--m-box--m-secondary__item--BackgroundColor: var(--pf-t--global--background--color--primary--default);
  --#{$tabs}--m-box--m-secondary__item--m-current--BackgroundColor: var(--pf-t--global--background--color--primary--clicked);
  --#{$tabs}__item--m-action--before--ZIndex: var(--pf-t--global--z-index--sm);

  // Tabs link
  --#{$tabs}__link--Color: var(--pf-t--global--text--color--subtle);
  --#{$tabs}__link--FontSize: var(--pf-t--global--font--size--sm);
  --#{$tabs}__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}__link--BorderRadius: var(--pf-t--global--border--radius--small);
  --#{$tabs}__link--PaddingBlockStart: var(--pf-t--global--spacer--xs);
  --#{$tabs}__link--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__link--PaddingBlockEnd: var(--pf-t--global--spacer--xs);
  --#{$tabs}__link--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__link--ColumnGap: var(--pf-t--global--spacer--sm);
  --#{$tabs}__link--disabled--Color: var(--pf-t--global--text--color--on-disabled);
  --#{$tabs}__link--disabled--BackgroundColor: var(--pf-t--global--background--color--disabled--default);
  --#{$tabs}__link--hover--BackgroundColor: var(--pf-t--global--background--color--action--plain--hover);
  --#{$tabs}__item--m-current__link--Color: var(--pf-t--global--text--color--regular);
  --#{$tabs}__item--m-current__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}--m-vertical__link--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}--m-vertical__link--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}--m-box__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}--m-box__link--disabled--Color: var(--pf-t--global--text--color--on-disabled);
  --#{$tabs}--m-box__link--disabled--BackgroundColor: var(--pf-t--global--background--color--disabled--default);
  --#{$tabs}--m-box__link--hover--BackgroundColor: var(--pf-t--global--background--color--action--plain--hover);
  --#{$tabs}--m-box__item--m-current__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}--m-box--m-secondary__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}--m-box--m-secondary__link--disabled--Color: var(--pf-t--global--text--color--on-disabled);
  --#{$tabs}--m-box--m-secondary__link--disabled--BackgroundColor: var(--pf-t--global--background--color--disabled--default);
  --#{$tabs}--m-box--m-secondary__link--hover--BackgroundColor: var(--pf-t--global--background--color--action--plain--hover);
  --#{$tabs}--m-box--m-secondary__item--m-current__link--BackgroundColor: var(--pf-t--global--background--color--action--plain--default);
  --#{$tabs}--m-subtab__link--FontSize: var(--pf-t--global--font--size--xs);

  // Link before
  --#{$tabs}__link--before--border-color--base: var(--pf-t--global--border--color--default);
  --#{$tabs}__link--before--border-width--base: var(--pf-t--global--border--width--regular);
  --#{$tabs}__link--before--BorderBlockStartColor: var(--#{$tabs}__link--before--border-color--base);
  --#{$tabs}__link--before--BorderInlineEndColor: var(--#{$tabs}__link--before--border-color--base);
  --#{$tabs}__link--before--BorderBlockEndColor: var(--#{$tabs}__link--before--border-color--base);
  --#{$tabs}__link--before--BorderInlineStartColor: var(--#{$tabs}__link--before--border-color--base);
  --#{$tabs}__link--before--BorderBlockStartWidth: 0;
  --#{$tabs}__link--before--BorderInlineEndWidth: 0;
  --#{$tabs}__link--before--BorderBlockEndWidth: 0;
  --#{$tabs}__link--before--BorderInlineStartWidth: 0;
  --#{$tabs}__link--before--InsetInlineStart: calc(var(--#{$tabs}__link--before--border-width--base) * -1);
  --#{$tabs}__link--disabled--before--BorderInlineEndWidth: 0;
  --#{$tabs}__link--disabled--before--BorderBlockEndWidth: var(--#{$tabs}--before--border-width--base);
  --#{$tabs}__link--disabled--before--BorderInlineStartWidth: 0;

  // Link after
  --#{$tabs}__link--after--InsetBlockStart: auto;
  --#{$tabs}__link--after--InsetInlineEnd: 0;
  --#{$tabs}__link--after--InsetBlockEnd: 0;
  --#{$tabs}__link--after--BorderColor: var(--pf-t--global--border--color--default);
  --#{$tabs}__link--after--BorderWidth: 0;
  --#{$tabs}__link--after--BorderBlockStartWidth: 0;
  --#{$tabs}__link--after--BorderInlineEndWidth: 0;
  --#{$tabs}__link--after--BorderInlineStartWidth: 0;
  --#{$tabs}__item--m-current__link--after--BorderColor: var(--pf-t--global--border--color--clicked);
  --#{$tabs}__item--m-current__link--after--BorderWidth: var(--pf-t--global--border--width--extra-strong);

  // Scroll buttons
  --#{$tabs}__scroll-button--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__scroll-button--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__scroll-button--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__scroll-button--PaddingInlineEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__scroll-button--Width: var(--pf-t--global--spacer--2xl);
  --#{$tabs}__scroll-button--TransitionDuration--margin: .125s;
  --#{$tabs}__scroll-button--TransitionDuration--transform: .125s;
  --#{$tabs}__scroll-button--TransitionDuration--opacity: .125s;

  // Scroll buttons before
  --#{$tabs}__scroll-button--before--BorderColor: var(--#{$tabs}--before--BorderColor);
  --#{$tabs}__scroll-button--before--border-width--base: var(--pf-t--global--border--width--regular);
  --#{$tabs}__scroll-button--before--BorderInlineEndWidth: 0;
  --#{$tabs}__scroll-button--before--BorderBlockEndWidth: var(--#{$tabs}__scroll-button--before--border-width--base);
  --#{$tabs}__scroll-button--before--BorderInlineStartWidth: 0;

  // Scroll snap
  --#{$tabs}__list--ScrollSnapTypeAxis: x;
  --#{$tabs}__list--ScrollSnapTypeStrictness: proximity;
  --#{$tabs}__list--ScrollSnapType: var(--#{$tabs}__list--ScrollSnapTypeAxis) var(--#{$tabs}__list--ScrollSnapTypeStrictness);
  --#{$tabs}__item--ScrollSnapAlign: end;
  --#{$tabs}--m-vertical__list--ScrollSnapTypeAxis: y;

  // Expandable
  --#{$tabs}__toggle--Display: flex;
  --#{$tabs}__toggle-icon--Transition: all 250ms cubic-bezier(.42, 0, .58, 1);
  --#{$tabs}__toggle-icon--Rotate: 0;
  --#{$tabs}--m-expanded__toggle-icon--Rotate: 90deg;
  --#{$tabs}--m-expandable--RowGap: var(--pf-t--global--spacer--sm);
  --#{$tabs}--m-expandable--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}--m-expandable--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}--m-expandable--PaddingInlineStart: var(--pf-t--global--spacer--md);
  --#{$tabs}--m-expandable--PaddingInlineEnd: var(--pf-t--global--spacer--md);

  // Item action
  --#{$tabs}__item-action--c-button--FontSize: var(--pf-t--global--font--size--sm);
  --#{$tabs}--m-subtab__item-action--c-button--FontSize: var(--pf-t--global--font--size--xs);
  --#{$tabs}__item-action-icon--MarginBlockStart: #{pf-size-prem(2px)};

  // Add button
  --#{$tabs}__add--before--BorderColor: var(--#{$tabs}__link--before--border-color--base);
  --#{$tabs}__add--before--BorderInlineStartWidth: var(--#{$tabs}__link--before--border-width--base);
  --#{$tabs}__add--c-button--FontSize: var(--pf-t--global--font--size--sm);
  --#{$tabs}--m-subtab__add--c-button--FontSize: var(--pf-t--global--font--size--xs);
  --#{$tabs}__add--PaddingBlockStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__add--PaddingBlockEnd: var(--pf-t--global--spacer--sm);
  --#{$tabs}__add--PaddingInlineStart: var(--pf-t--global--spacer--sm);
  --#{$tabs}__add--PaddingInlineEnd: var(--pf-t--global--spacer--sm);

  // Overflow menu toggle icon
  --#{$tabs}__link-toggle-icon--Color: var(--pf-t--global--icon--color--regular);
  --#{$tabs}__link-toggle-icon--Transition: .2s ease-in 0s;
  --#{$tabs}__link-toggle-icon--Rotate: 0;
  --#{$tabs}__link-toggle-icon--FontSize: var(--pf-t--global--font--size--sm);
  --#{$tabs}__link--m-expanded__toggle-icon--Rotate: 90deg;
}

.#{$tabs} {
  position: relative;
  display: flex;
  width: var(--#{$tabs}--Width);
  padding-inline-start: var(--#{$tabs}--inset);
  padding-inline-end: var(--#{$tabs}--inset);
  overflow: hidden; // needed for scroll button animation. limit to pf-m-scrollable in breaking change. may need new modifier so this is applied to a menu that supports scrolling, regardless of whether the scroll buttons are shown.

  &::before {
    position: absolute;
    inset-block-end: 0;
    inset-inline-start: 0;
    inset-inline-end: 0;
    border: solid var(--#{$tabs}--before--BorderColor);
    border-block-start-width: var(--#{$tabs}--before--BorderBlockStartWidth);
    border-block-end-width: var(--#{$tabs}--before--BorderBlockEndWidth);
    border-inline-start-width: var(--#{$tabs}--before--BorderInlineStartWidth);
    border-inline-end-width: var(--#{$tabs}--before--BorderInlineEndWidth);
  }

  // Filled style
  &.pf-m-fill {
    .#{$tabs}__list {
      flex-basis: 100%;
    }

    .#{$tabs}__item {
      flex-grow: 1;

      &:first-child {
        --#{$tabs}--m-box__item--m-current--first-child__link--before--BorderInlineStartWidth: 0;
      }

      &:last-child {
        --#{$tabs}--m-box__item--m-current--last-child__link--before--BorderInlineEndWidth: 0;
      }
    }

    .#{$tabs}__link {
      flex-basis: 100%;
      justify-content: center;
    }
  }

  // Scroll buttons enabled
  &.pf-m-scrollable {
    .#{$tabs}__scroll-button {
      opacity: 1;
    }

    // Scroll buttons
    .#{$tabs}__scroll-button:nth-of-type(1) {
      margin-inline-end: 0;
      transform: translateX(0);
    }

    .#{$tabs}__scroll-button:nth-of-type(2) {
      margin-inline-start: 0;
      transform: translateX(0);
    }
  }

  &.pf-m-no-border-bottom {
    --#{$tabs}--before--BorderBlockEndWidth: 0;
    --#{$tabs}__link--disabled--before--BorderBlockEndWidth: 0;
  }

  // Remove bottom border for variants
  &.pf-m-box,
  &.pf-m-vertical {
    .#{$tabs}__link {
      --#{$tabs}__link--after--BorderBlockEndWidth: 0;
    }
  }

  // Box
  &.pf-m-box {
    --#{$tabs}__item--BackgroundColor: var(--#{$tabs}--m-box__item--BackgroundColor);
    --#{$tabs}__item--m-current--BackgroundColor: var(--#{$tabs}--m-box__item--m-current--BackgroundColor);
    --#{$tabs}__link--BackgroundColor: var(--#{$tabs}--m-box__link--BackgroundColor);
    --#{$tabs}__link--disabled--Color: var(--#{$tabs}--m-box__link--disabled--Color);
    --#{$tabs}__link--disabled--BackgroundColor: var(--#{$tabs}--m-box__link--disabled--BackgroundColor);
    --#{$tabs}__link--hover--BackgroundColor: var(--#{$tabs}--m-box__link--hover--BackgroundColor);
    --#{$tabs}__item--m-current__link--BackgroundColor: var(--#{$tabs}--m-box__item--m-current__link--BackgroundColor);
    --#{$tabs}__link--before--BorderBlockEndWidth: var(--#{$tabs}__link--before--border-width--base);
    --#{$tabs}__link--after--InsetBlockStart: 0;
    --#{$tabs}__link--after--InsetBlockEnd: auto;

    .#{$tabs}__link {
      --#{$tabs}__link--after--BorderBlockStartWidth: var(--#{$tabs}__link--after--BorderWidth);
    }

    // Remove border from last-child
    .#{$tabs}__item:last-child {
      --#{$tabs}__link--before--BorderInlineEndWidth: 0;
    }

    .#{$tabs}__item.pf-m-current {
      --#{$tabs}__link--BackgroundColor: var(--#{$tabs}__item--m-current__link--BackgroundColor);
      --#{$tabs}__link--before--BorderBlockEndColor: var(--#{$tabs}__link--BackgroundColor);
    }

    // stylelint-disable

    // Collapse left border into scroll button when expanded
    &.pf-m-scrollable .#{$tabs}__item.pf-m-current:first-child .#{$tabs}__link::before {
     inset-inline-start: calc(var(--#{$tabs}__link--before--border-width--base) * -1);
    }

    // Collapse left border into list when expanded
    &.pf-m-scrollable .#{$tabs}__scroll-button:nth-of-type(2)::before {
     inset-inline-start: calc(var(--#{$tabs}__link--before--border-width--base) * -1);
    }
    // stylelint-enable

    // stylelint-disable selector-max-class
    // Remove offset from current adjacent item
    .#{$tabs}__item.pf-m-current + .#{$tabs}__item {
      --#{$tabs}__link--before--InsetInlineStart: 0;
    }
    // stylelint-enable

    &.pf-m-secondary {
      --#{$tabs}__item--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__item--BackgroundColor);
      --#{$tabs}__item--m-current--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__item--m-current--BackgroundColor);
      --#{$tabs}__link--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__link--BackgroundColor);
      --#{$tabs}__link--disabled--Color: var(--#{$tabs}--m-box--m-secondary__link--disabled--Color);
      --#{$tabs}__link--disabled--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__link--disabled--BackgroundColor);
      --#{$tabs}__link--hover--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__link--hover--BackgroundColor);
      --#{$tabs}__item--m-current__link--BackgroundColor: var(--#{$tabs}--m-box--m-secondary__item--m-current__link--BackgroundColor);
    }
  }

  // Vertical
  &.pf-m-vertical {
    --#{$tabs}--Width: var(--#{$tabs}--m-vertical--Width);
    --#{$tabs}--inset: var(--#{$tabs}--m-vertical--inset);
    --#{$tabs}--before--BorderBlockEndWidth: 0;
    --#{$tabs}__item--PaddingInlineStart: var(--#{$tabs}--m-vertical__item--PaddingInlineStart);
    --#{$tabs}__item--PaddingInlineEnd: var(--#{$tabs}--m-vertical__item--PaddingInlineEnd);
    --#{$tabs}__link--PaddingInlineStart: var(--#{$tabs}--m-vertical__link--PaddingInlineStart);
    --#{$tabs}__link--PaddingInlineEnd: var(--#{$tabs}--m-vertical__link--PaddingInlineEnd);
    --#{$tabs}__link--before--InsetInlineStart: 0;
    --#{$tabs}__link--disabled--before--BorderBlockEndWidth: 0;
    --#{$tabs}__link--disabled--before--BorderInlineStartWidth: var(--#{$tabs}--before--border-width--base);
    --#{$tabs}__link--after--InsetBlockStart: 0;
    --#{$tabs}__link--after--InsetBlockEnd: 0;
    --#{$tabs}__link--after--InsetInlineEnd: auto;
    --#{$tabs}__list--ScrollSnapTypeAxis: var(--#{$tabs}--m-vertical__list--ScrollSnapTypeAxis);

    display: inline-flex;
    flex-direction: column;
    height: 100%; // If not a flex child, set height
    padding: 0; // Because vertical variant has no scroll buttons, reset padding
    overflow: visible; // remove in breaking change release

    .#{$tabs}__list {
      position: relative;
      flex-direction: column;
      flex-grow: 1;
      max-width: var(--#{$tabs}--m-vertical--MaxWidth);

      &::before {
        position: absolute;
        inset-inline-end: auto;
        border: solid var(--#{$tabs}--m-vertical__list--before--BorderColor);
        border-block-start-width: var(--#{$tabs}--m-vertical__list--before--BorderBlockStartWidth);
        border-block-end-width: var(--#{$tabs}--m-vertical__list--before--BorderBlockEndWidth);
        border-inline-start-width: var(--#{$tabs}--m-vertical__list--before--BorderInlineStartWidth);
        border-inline-end-width: var(--#{$tabs}--m-vertical__list--before--BorderInlineEndWidth);
      }
    }

    // Because vertical variant has no scroll buttons, move inset to first/last __item to prevent default scrolling behavior
    .#{$tabs}__item:first-child {
      margin-block-start: var(--#{$tabs}--inset);
    }

    .#{$tabs}__item:last-child {
      margin-block-end: var(--#{$tabs}--inset);
    }

    .#{$tabs}__link {
      --#{$tabs}__link--after--BorderBlockStartWidth: 0;
      --#{$tabs}__link--after--BorderInlineStartWidth: var(--#{$tabs}__link--after--BorderWidth);

      max-width: 100%;
      text-align: start;
    }

    .#{$tabs}__item-text {
      max-width: 100%;
      overflow-wrap: break-word;
    }

    @each $breakpoint, $breakpoint-value in $pf-v6-c-tabs--breakpoint-map {
      $breakpoint-name: if($breakpoint != "base", -on-#{$breakpoint}, "");

      @include pf-v6-apply-breakpoint($breakpoint) {
        // stylelint-disable max-nesting-depth
        &.pf-m-expandable#{$breakpoint-name} {
          --#{$tabs}__list--Display: none;
          --#{$tabs}__toggle--Display: flex;
        }

        &.pf-m-non-expandable#{$breakpoint-name} {
          --#{$tabs}__list--Display: flex;
          --#{$tabs}__toggle--Display: none;
        }
        // stylelint-enable
      }
    }

    &.pf-m-expandable {
      row-gap: var(--#{$tabs}--m-expandable--RowGap);
      padding-block-start: var(--#{$tabs}--m-expandable--PaddingBlockStart);
      padding-block-end: var(--#{$tabs}--m-expandable--PaddingBlockEnd);
      padding-inline-start: var(--#{$tabs}--m-expandable--PaddingInlineStart);
      padding-inline-end: var(--#{$tabs}--m-expandable--PaddingInlineEnd);
    }

    &.pf-m-expanded {
      --#{$tabs}__list--Display: flex;
      --#{$tabs}__toggle-icon--Rotate: var(--#{$tabs}--m-expanded__toggle-icon--Rotate);
    }
  }

  // Box, vertical
  &.pf-m-box.pf-m-vertical {
    --#{$tabs}--inset: var(--#{$tabs}--m-vertical--m-box--inset);
    --#{$tabs}--m-vertical__list--before--BorderInlineStartWidth: 0;
    --#{$tabs}--m-vertical__list--before--BorderInlineEndWidth: var(--#{$tabs}--before--border-width--base);
    --#{$tabs}__link--before--BorderInlineEndWidth: var(--#{$tabs}__link--before--border-width--base);
    --#{$tabs}__link--disabled--before--BorderInlineEndWidth: var(--#{$tabs}--before--border-width--base);
    --#{$tabs}__link--disabled--before--BorderBlockEndWidth: var(--#{$tabs}--before--border-width--base);
    --#{$tabs}__link--disabled--before--BorderInlineStartWidth: 0;

    .#{$tabs}__list::before {
      inset-inline-start: auto;
      inset-inline-end: 0;
    }

    // stylelint-disable selector-max-class
    .#{$tabs}__item:last-child {
      --#{$tabs}__link--before--BorderInlineEndWidth: var(--#{$tabs}__link--before--border-width--base);
    }
    .#{$tabs}__item:first-child {
      --#{$tabs}__link--before--BorderBlockStartWidth: var(--#{$tabs}__link--before--border-width--base);
    }

    // Add border right color and weight
    .#{$tabs}__item.pf-m-current {
      --#{$tabs}__link--before--BorderInlineEndColor: var(--#{$tabs}__item--m-current__link--BackgroundColor);
      --#{$tabs}__link--before--BorderBlockEndColor: var(--#{$tabs}__link--before--border-color--base);
    }

    // Add border right color and weight
    .#{$tabs}__item:first-child.pf-m-current {
      --#{$tabs}__link--before--BorderBlockStartWidth: var(--#{$tabs}__link--before--border-width--base);
    }

    // Offset vertical border to overlap horizontal border
    .#{$tabs}__link::after {
     inset-block-start: calc(var(--#{$tabs}__link--before--border-width--base) * -1);
    }

    // Undo offset to .pf-m-current adjacent item
    .#{$tabs}__item:first-child .#{$tabs}__link::after,
    .#{$tabs}__item.pf-m-current + .#{$tabs}__item .#{$tabs}__link::after {
      inset-block-start: 0;
    }
    // stylelint-enable
  }

  &.pf-m-subtab {
    --#{$tabs}__link--FontSize: var(--#{$tabs}--m-subtab__link--FontSize);
    --#{$tabs}__item-action--c-button--FontSize: var(--#{$tabs}--m-subtab__item-action--c-button--FontSize);
    --#{$tabs}__add--c-button--FontSize: var(--#{$tabs}--m-subtab__add--c-button--FontSize);
  }

  &.pf-m-page-insets {
    --#{$tabs}--inset: var(--#{$tabs}--m-page-insets--inset);
  }

  &.pf-m-overflow {
    &,
    .#{$tabs}__list {
      overflow: visible;
    }
  }
}

// Expandable toggle
.#{$tabs}__toggle {
  display: var(--#{$tabs}__toggle--Display);
  align-items: center;
}

.#{$tabs}__toggle-button {
  .#{$button} {
    justify-content: start;
    white-space: normal;
  }
}

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

  display: inline-block;
  transition: var(--#{$tabs}__toggle-icon--Transition);
  transform: rotate(var(--#{$tabs}__toggle-icon--Rotate));
}

// Tab list
.#{$tabs}__list {
  @include pf-v6-overflow-hide-scroll;

  position: relative;
  display: var(--#{$tabs}__list--Display);
  max-width: 100%;
  overflow-x: auto;
  scroll-behavior: smooth;
  scroll-snap-type: var(--#{$tabs}__list--ScrollSnapType);
  -webkit-overflow-scrolling: touch;
}

// Tabs item
.#{$tabs}__item {
  position: relative;
  display: flex;
  flex: none;
  column-gap: var(--#{$tabs}__item--ColumnGap);
  scroll-snap-align: var(--#{$tabs}__item--ScrollSnapAlign);
  padding-block-start: var(--#{$tabs}__item--PaddingBlockStart);
  padding-block-end: var(--#{$tabs}__item--PaddingBlockEnd);
  padding-inline-start: var(--#{$tabs}__item--PaddingInlineStart);
  padding-inline-end: var(--#{$tabs}__item--PaddingInlineEnd);
  background-color: var(--#{$tabs}__item--BackgroundColor);

  // Current
  &.pf-m-current {
    --#{$tabs}__link--Color: var(--#{$tabs}__item--m-current__link--Color);
    --#{$tabs}__link--after--BorderColor: var(--#{$tabs}__item--m-current__link--after--BorderColor);
    --#{$tabs}__link--after--BorderWidth: var(--#{$tabs}__item--m-current__link--after--BorderWidth);
    --#{$tabs}__item--BackgroundColor: var(--#{$tabs}__item--m-current--BackgroundColor);
  }

  // Action
  &.pf-m-action {
    position: relative;

    &::before {
      z-index: var(--#{$tabs}__item--m-action--before--ZIndex);
    }

    .#{$tabs}__link::before,
    .#{$tabs}__link::after {
      content: revert;
    }
  }
}

.#{$tabs}::before,
.#{$tabs}__list::before,
.#{$tabs}__link::before,
.#{$tabs}__link::after,
.#{$tabs}__item.pf-m-action::before,
.#{$tabs}__item.pf-m-action::after,
.#{$tabs}__scroll-button::before,
.#{$tabs}__add::before {
  position: absolute;
  inset-block-end: 0;
  inset-inline-start: 0;
  inset-inline-end: 0;
  content: "";
  border-style: solid;
}

.#{$tabs}__list::before,
.#{$tabs}__link::before,
.#{$tabs}__link::after,
.#{$tabs}__item.pf-m-action::before,
.#{$tabs}__item.pf-m-action::after,
.#{$tabs}__scroll-button::before,
.#{$tabs}__add::before {
  inset-block-start: 0;
}

.#{$tabs}__link,
.#{$tabs}__scroll-button,
.#{$tabs}__list::before,
.#{$tabs}__add::before {
  border: 0;
}

// Tab link
.#{$tabs}__link {
  @at-root .#{$tabs}__item.pf-m-action,
  & {
    --#{$tabs}__link--after--BorderBlockEndWidth: var(--#{$tabs}__link--after--BorderWidth); // Set default border target
  }

  display: flex;
  flex: 1;
  column-gap: var(--#{$tabs}__link--ColumnGap);
  align-items: center;
  padding-block-start: var(--#{$tabs}__link--PaddingBlockStart);
  padding-block-end: var(--#{$tabs}__link--PaddingBlockEnd);
  padding-inline-start: var(--#{$tabs}__link--PaddingInlineStart);
  padding-inline-end: var(--#{$tabs}__link--PaddingInlineEnd);
  font-size: var(--#{$tabs}__link--FontSize);
  color: var(--#{$tabs}__link--Color);
  text-decoration: none;
  background-color: var(--#{$tabs}__link--BackgroundColor);
  border-radius: var(--#{$tabs}__link--BorderRadius);

  @at-root .#{$tabs}__item.pf-m-action,
  & {
    &::before {
      pointer-events: none;
      border-block-start-color: var(--#{$tabs}__link--before--BorderBlockStartColor);
      border-block-start-width: var(--#{$tabs}__link--before--BorderBlockStartWidth);
      border-block-end-color: var(--#{$tabs}__link--before--BorderBlockEndColor);
      border-block-end-width: var(--#{$tabs}__link--before--BorderBlockEndWidth);
      border-inline-start-color: var(--#{$tabs}__link--before--BorderInlineStartColor);
      border-inline-start-width: var(--#{$tabs}__link--before--BorderInlineStartWidth);
      border-inline-end-color: var(--#{$tabs}__link--before--BorderInlineEndColor);
      border-inline-end-width: var(--#{$tabs}__link--before--BorderInlineEndWidth);
    }
  }

  @at-root .#{$tabs}__item.pf-m-action,
  & {
    &::after {
      inset-block-start: var(--#{$tabs}__link--after--InsetBlockStart);
      inset-block-end: var(--#{$tabs}__link--after--InsetBlockEnd);
      inset-inline-start: var(--#{$tabs}__link--before--InsetInlineStart); // use the ::before Left value to offset the top border / overlap left border
      inset-inline-end: var(--#{$tabs}__link--after--InsetInlineEnd);
      border-color: var(--#{$tabs}__link--after--BorderColor);
      border-block-start-width: var(--#{$tabs}__link--after--BorderBlockStartWidth);
      border-block-end-width: var(--#{$tabs}__link--after--BorderBlockEndWidth);
      border-inline-start-width: var(--#{$tabs}__link--after--BorderInlineStartWidth);
      border-inline-end-width: var(--#{$tabs}__link--after--BorderInlineEndWidth);
    }
  }

  &:where(:hover, :focus) {
    --#{$tabs}__link--BackgroundColor: var(--#{$tabs}__link--hover--BackgroundColor);
      }

  &:disabled,
  &.pf-m-disabled {
    pointer-events: none;
  }

  @at-root .#{$tabs}__item.pf-m-action.pf-m-disabled,
  &:disabled,
  &.pf-m-disabled,
  &.pf-m-aria-disabled {
    --#{$tabs}__link--Color: var(--#{$tabs}__link--disabled--Color);
    --#{$tabs}__link--before--BorderInlineEndWidth: var(--#{$tabs}__link--disabled--before--BorderInlineEndWidth);
    --#{$tabs}__link--before--BorderBlockEndWidth: var(--#{$tabs}__link--disabled--before--BorderBlockEndWidth);
    --#{$tabs}__link--before--BorderInlineStartWidth: var(--#{$tabs}__link--disabled--before--BorderInlineStartWidth);
    --#{$tabs}__link--after--BorderWidth: 0;
  }

  &:is(:disabled, .pf-m-disabled, .pf-m-aria-disabled) {
    --#{$tabs}__link--BackgroundColor: var(--#{$tabs}__link--disabled--BackgroundColor);
  }

  @at-root .#{$tabs}__item.pf-m-action.pf-m-disabled {
    --#{$tabs}__link--BackgroundColor: transparent;
  }

  &.pf-m-aria-disabled {
    cursor: default;
  }

  &.pf-m-expanded {
    --#{$tabs}__link-toggle-icon--Rotate: var(--#{$tabs}__link--m-expanded__toggle-icon--Rotate);
  }
}

.#{$tabs}__link-toggle-icon {
  @include pf-v6-mirror-inline-on-rtl;

  align-self: end;
  font-size: var(--#{$tabs}__link-toggle-icon--FontSize);
  color: var(--#{$tabs}__link-toggle-icon--Color);
  transition: var(--#{$tabs}__link-toggle-icon--Transition);
  transform: rotate(var(--#{$tabs}__link-toggle-icon--Rotate));
}

.#{$tabs}__item-action {
  display: flex;

  .#{$button} {
    --#{$button}--FontSize: var(--#{$tabs}__item-action--c-button--FontSize);
  }
}

.#{$tabs}__item-action-icon {
  display: inline-block;
  margin-block-start: var(--#{$tabs}__item-action-icon--MarginBlockStart);
}

// Scroll buttons
.#{$tabs}__scroll-button {
  padding-block-start: var(--#{$tabs}__scroll-button--PaddingBlockStart);
  padding-block-end: var(--#{$tabs}__scroll-button--PaddingBlockEnd);
  padding-inline-start: var(--#{$tabs}__scroll-button--PaddingInlineStart);
  padding-inline-end: var(--#{$tabs}__scroll-button--PaddingInlineEnd);
  opacity: 0;
  transition: margin var(--#{$tabs}__scroll-button--TransitionDuration--margin), transform var(--#{$tabs}__scroll-button--TransitionDuration--transform), opacity var(--#{$tabs}__scroll-button--TransitionDuration--opacity);

    &::before {
    border-color: var(--#{$tabs}__scroll-button--before--BorderColor);
    border-block-start-width: 0;
    border-block-end-width: var(--#{$tabs}__scroll-button--before--BorderBlockEndWidth);
    border-inline-start-width: var(--#{$tabs}__scroll-button--before--BorderInlineStartWidth);
    border-inline-end-width: var(--#{$tabs}__scroll-button--before--BorderInlineEndWidth);
  }

  &:nth-of-type(1) {
    --#{$tabs}__scroll-button--before--BorderInlineEndWidth: var(--#{$tabs}__scroll-button--before--border-width--base);

    margin-inline-end: calc(var(--#{$tabs}__scroll-button--Width) * -1);
    transform: translateX(-100%);
  }

  &:nth-of-type(2) {
    --#{$tabs}__scroll-button--before--BorderInlineStartWidth: var(--#{$tabs}__scroll-button--before--border-width--base);

    margin-inline-start: calc(var(--#{$tabs}__scroll-button--Width) * -1);
    transform: translateX(100%);
  }
}

.#{$tabs}__add {
  position: relative;
  display: flex;
  padding-block-start: var(--#{$tabs}__add--PaddingBlockStart);
  padding-block-end: var(--#{$tabs}__add--PaddingBlockEnd);
  padding-inline-start: var(--#{$tabs}__add--PaddingInlineStart);
  padding-inline-end: var(--#{$tabs}__add--PaddingInlineEnd);

  &::before {
    border-inline-start: var(--#{$tabs}__add--before--BorderInlineStartWidth) solid var(--#{$tabs}__add--before--BorderColor);
  }

  .#{$button} {
    --#{$button}--FontSize: var(--#{$tabs}__add--c-button--FontSize);
  }
}

// stylelint-disable no-duplicate-selectors, max-nesting-depth
.#{$tabs} {
  @each $breakpoint, $breakpoint-value in $pf-v6-c-tabs--breakpoint-map {
    $breakpoint-name: if($breakpoint != "base", -on-#{$breakpoint}, "");

    @include pf-v6-apply-breakpoint($breakpoint) {
      @each $spacer, $spacer-value in $pf-v6-c-tabs--spacer-map {
        &.pf-m-inset-#{$spacer}#{$breakpoint-name} {
          --#{$tabs}--inset: #{$spacer-value};
          --#{$tabs}--m-vertical--inset: #{$spacer-value};
          --#{$tabs}--m-vertical--m-box--inset: #{$spacer-value};
        }
      }
    }
  }
}
// stylelint-enable




© 2015 - 2025 Weber Informatics LLC | Privacy Policy