@import 'variables.scss';

@include ng-deep($enableNgDeep) {
  .ng5-slider {
    display: inline-block;
    position: relative;
    height: $barDimension;
    width: 100%;
    margin: $sliderMarginWithLabel 0 $sliderMargin 0;
    vertical-align: middle;
    user-select: none;
    touch-action: pan-y;

    &.with-legend {
      margin-bottom: $withLegendMargin;
    }

    &[disabled] {
      cursor: not-allowed;

      .ng5-slider-pointer {
        cursor: not-allowed;
        background-color: $handleDisabledColor;
      }

      .ng5-slider-draggable {
        cursor: not-allowed;
      }

      .ng5-slider-selection {
        background: $barDisabledFillColor;
      }

      .ng5-slider-tick {
        cursor: not-allowed;

        &.ng5-slider-selected {
          background: $barDisabledFillColor;
        }
      }
    }

    .ng5-slider-span {
      white-space: nowrap;
      position: absolute;
      display: inline-block;
    }

    .ng5-slider-base {
      width: 100%;
      height: 100%;
      padding: 0;
    }

    .ng5-slider-bar-wrapper {
      left: 0;
      box-sizing: border-box;
      margin-top: -$handleSize / 2;
      padding-top: $handleSize / 2;
      width: 100%;
      height: $handleSize;
      z-index: 1;
    }

    .ng5-slider-draggable {
      cursor: move;
    }

    .ng5-slider-bar {
      left: 0;
      width: 100%;
      height: $barDimension;
      z-index: 1;
      background: $barNormalColor;
      @include rounded($barDimension / 2);
    }

    .ng5-slider-bar-wrapper.ng5-slider-transparent .ng5-slider-bar {
      background: transparent;
    }

    .ng5-slider-bar-wrapper.ng5-slider-left-out-selection .ng5-slider-bar {
      background: $barLeftOutSelectionColor;
    }

    .ng5-slider-bar-wrapper.ng5-slider-right-out-selection .ng5-slider-bar {
      background: $barRightOutSelectionColor;
    }

    .ng5-slider-selection {
      z-index: 2;
      background: $barFillColor;
      @include rounded($barDimension / 2);
    }

    .ng5-slider-pointer {
      cursor: pointer;
      width: $handleSize;
      height: $handleSize;
      top: -$handleSize / 2 + $barDimension / 2;
      background-color: $handleBgColor;
      z-index: 3;
      @include rounded($handleSize / 2);

      &:after {
        content: '';
        width: $handlePointerSize;
        height: $handlePointerSize;
        position: absolute;
        top: $handleSize / 2 - $handlePointerSize / 2;
        left: $handleSize / 2 - $handlePointerSize / 2;
        @include rounded($handlePointerSize / 2);
        background: $handleInnerColor;
      }

      &:hover:after {
        background-color: $handleHoverColor;
      }

      &.ng5-slider-active {
        z-index: 4;

        &:after {
          background-color: $handleActiveColor;
        }
      }
    }

    .ng5-slider-bubble {
      cursor: default;
      bottom: $handleSize / 2;
      padding: $bubblePaddingVertical $bubblePaddingHorizontal;
      color: $labelTextColor;
      font-size: $labelFontSize;

      &.ng5-slider-limit {
        color: $limitLabelTextColor;
      }
    }

    .ng5-slider-ticks {
      box-sizing: border-box;
      width: 100%;
      height: 0;
      position: absolute;
      left: 0;
      top: -($ticksHeight - $barDimension) / 2;
      margin: 0;
      z-index: 1;
      list-style: none;
    }

    .ng5-slider-ticks-values-under {
      .ng5-slider-tick-value {
        top: auto;
        bottom: $ticksValuePosition - 2;
      }
    }

    .ng5-slider-tick {
      text-align: center;
      cursor: pointer;
      width: $ticksWidth;
      height: $ticksHeight;
      background: $ticksColor;
      border-radius: 50%;
      position: absolute;
      top: 0;
      left: 0;
      margin-left: $handleSize / 2 - $ticksWidth / 2; // for centering

      &.ng5-slider-selected {
        background: $selectedTicksColor;
      }
    }

    .ng5-slider-tick-value {
      position: absolute;
      top: $ticksValuePosition;
      transform: translate(-50%, 0);
    }

    .ng5-slider-tick-legend {
      position: absolute;
      top: $ticksLegendPosition;
      transform: translate(-50%, 0);
      max-width: $tickLegendMaxWidth;
      white-space: normal;
    }

    &.vertical {
      position: relative;
      width: $barDimension;
      height: 100%;
      margin: 0 $sliderVerticalMargin;
      padding: 0;
      vertical-align: baseline;
      touch-action: pan-x;

      .ng5-slider-base {
        width: 100%;
        height: 100%;
        padding: 0;
      }

      .ng5-slider-bar-wrapper {
        top: auto;
        left: 0;
        margin: 0 0 0 (-$handleSize / 2);
        padding: 0 0 0 $handleSize / 2;
        height: 100%;
        width: $handleSize;
      }

      .ng5-slider-bar {
        bottom: 0;
        left: auto;
        width: $barDimension;
        height: 100%;
      }

      .ng5-slider-pointer {
        left: -$handleSize / 2 + $barDimension / 2 !important;
        top: auto;
        bottom: 0;
      }

      .ng5-slider-bubble {
        left: $handleSize / 2 !important;
        bottom: 0;
      }

      .ng5-slider-ticks {
        height: 100%;
        width: 0;
        left: -($ticksHeight - $barDimension) / 2;
        top: 0;
        z-index: 1;
      }

      .ng5-slider-tick {
        vertical-align: middle;
        margin-left: auto;
        margin-top: $handleSize / 2 - $ticksWidth / 2; // for centering
      }

      .ng5-slider-tick-value {
        left: $ticksValuePositionOnVertical;
        top: auto;
        transform: translate(0, -28%);
      }

      .ng5-slider-tick-legend {
        top: auto;
        right: $ticksLegendPosition;
        transform: translate(0, -28%);
        max-width: none;
        white-space: nowrap;
      }

      .ng5-slider-ticks-values-under {
        .ng5-slider-tick-value {
          bottom: auto;
          left: auto;
          right: $ticksValuePositionOnVertical;
        }
      }
    }

    * {
      transition: none;
    }

    &.animate {
      .ng5-slider-bar-wrapper {
        transition: all linear $animationDuration;
      }

      .ng5-slider-selection {
        transition: background-color linear $animationDuration;
      }

      .ng5-slider-pointer {
        transition: all linear $animationDuration;
      }

      .ng5-slider-bubble {
        transition: all linear $animationDuration;

        &.ng5-slider-limit {
          transition: opacity linear $animationDuration;
        }

        &.ng5-slider-combined {
          transition: opacity linear $animationDuration;
        }
      }

      .ng5-slider-tick {
        transition: background-color linear $animationDuration;
      }
    }
  }
}
