/*
 * Copyright (c) 2010, 2025 BSI Business Systems Integration AG
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 */
@view-tab-transition-duration: 200ms;
@view-tab-transition: margin @view-tab-transition-duration ease-out, padding @view-tab-transition-duration ease-out, width @view-tab-transition-duration ease-out, border-radius @view-tab-transition-duration ease-out;

// The wrapper is necessary to make sure the view tabs don't change their size when one of them is selected.
// Without a wrapper this would not be possible because an unselected view tab has a margin, a selected one does not.
// When the tabs are shrinking, flex box distributes the size based on their widths (which is different). It should actually distribute it based on width + margin.
// So, if the items were static (no shrink or grow), it would work without a wrapper.
// A programmatic layout would not make it easier because we are using transitions.
// When the inBackground property changes, the items need to be layouted considering the margin, but reading the margin would return the wrong value while the transition is running.
.view-tab-wrapper {
  display: flex;
  width: @view-tab-selected-width;
}

.view-tab {
  position: relative;
  border-radius: @view-tab-border-radius;
  margin: @view-tab-margin-top @view-tab-margin @view-tab-margin;

  & > .key-box {
    bottom: @view-tab-key-box-bottom;
  }

  &.in-background {
    border-radius: @view-tab-selected-border-radius;
  }

  & > .edge {
    // Ensure GlassPane.js does not set position: relative if glass pane is added before view tab is selected
    position: absolute;
  }

  &.selected:not(.in-background) {
    margin: @view-tab-selected-margin-top 0 0;
    border-radius: @view-tab-selected-border-radius @view-tab-selected-border-radius 0 0;

    & > .edge {
      #scout.inverted-bottom-round-edge(@border-radius: @view-tab-selected-border-radius, @color: @view-tab-selected-background-color);

      &.right {
        z-index: 1; // lay over right tab
      }
    }

    & > .key-box {
      bottom: @view-tab-key-box-bottom + @view-tab-margin;
    }
  }

  &.animate-bring-to-front,
  &.animate-bring-to-back {
    // Transition should only be active when desktop changes from back to front and back, not when outline is changed
    // The classes animate-* are only set while the animation is running, thus, we need an animation, even if it does nothing (nop)
    transition: @view-tab-transition;
    animation: nop @view-tab-transition-duration ease-out;

    &:not(.in-background) {

      & > .edge {

        &.left {
          visibility: hidden;
          animation: show-view-tab-left-edge 40ms ease-out 160ms forwards;
        }

        &.right {
          visibility: hidden;
          animation: show-view-tab-right-edge 40ms ease-out 160ms forwards;
        }
      }
    }
  }
}

.view-button-tab {
  display: flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  width: calc(~'100% - ' 2 * @view-tab-margin);

  &:hover {
    cursor: pointer;
    background-color: @view-tab-hover-background-color;
  }

  &.selected {
    background-color: @view-tab-selected-background-color;
    color: @view-tab-selected-color;

    &.in-background {
      background-color: @view-tab-in-background-selected-background-color;
    }

    &:not(.in-background) {
      width: 100%;
    }

    &:focus {
      box-shadow: none;

      &::after {
        #scout.pseudo-overlay(4px);
        border-radius: @view-tab-selected-border-radius;
        #scout.focus-inset-box-shadow();
      }
    }
  }

  &:focus {
    #scout.focus-inset-box-shadow();
  }

  &.disabled {
    color: @desktop-header-disabled-color;;

    &:hover {
      cursor: default;
      color: @desktop-header-disabled-color;
      background-color: transparent;
    }

    &.selected {
      color: @text-disabled-color;
    }
  }

  & > .icon {
    display: inline-block;
    position: relative;
    vertical-align: middle;
    font-size: @view-tab-icon-font-size;
  }
}

@keyframes show-view-tab-left-edge {
  0% {
    visibility: visible;
    left: -5px;
  }
  100% {
    left: -12px;
  }
}

@keyframes show-view-tab-right-edge {
  0% {
    visibility: visible;
    right: -5px;
  }
  100% {
    right: -12px;
  }
}
