/*! =========================================================
 * bootstrap-slider.js
 *
 * Maintainers:
 *		Kyle Kemp
 *			- Twitter: @seiyria
 *			- Github:  seiyria
 *		Rohit Kalkur
 *			- Twitter: @Rovolutionary
 *			- Github:  rovolution
 *
 * =========================================================
 *
 * bootstrap-slider is released under the MIT License
 * Copyright (c) 2019 Kyle Kemp, Rohit Kalkur, and contributors
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * ========================================================= */

$slider-line-height: 20px !default;
$slider-border-radius: 4px !default;
$slider-horizontal-width: 210px !default;
$slider-vertical-height: 210px !default;

// Primary colors
$slider-primary: null !default;
@if variable-exists(brand-primary) {
  $slider-primary: $brand-primary !default;
} @else {
  $slider-primary: #0480BE !default;
}

$slider-primary-top: $slider-primary !default;
$slider-primary-bottom: darken($slider-primary, 5%) !default;
$slider-secondary-top: saturate(lighten($slider-primary, 28%), 20%) !default;
$slider-secondary-bottom: saturate(lighten($slider-primary, 23%), 2%) !default;

// grays for slider channel and disabled states
$slider-gray-1: #BEBEBE !default;
$slider-gray-2: #DFDFDF !default;
$slider-gray-3: #E5E5E5 !default;
$slider-gray-4: #E9E9E9 !default;
$slider-gray-5: #F5F5F5 !default;
$slider-gray-6: #F9F9F9 !default;

// unicode color for demo page
$slider-unicode-color: #726204 !default;

@mixin slider_background-image($colorstart:#F5F5F5, $colorend:#F9F9F9, $backcolor: #F7F7F7) {
  background-color: $backcolor;
  background-image: -moz-linear-gradient(top, $colorstart, $colorend);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from($colorstart), to($colorend));
  background-image: -webkit-linear-gradient(top, $colorstart, $colorend);
  background-image: -o-linear-gradient(top, $colorstart, $colorend);
  background-image: linear-gradient(to bottom, $colorstart, $colorend);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$colorstart}', endColorstr='#{$colorend}', GradientType=0);
}

@mixin slider_box-sizing($value) {
  -webkit-box-sizing: $value;
  -moz-box-sizing: $value;
  box-sizing: $value;
}

@mixin slider_box-shadow($value...) {
  -webkit-box-shadow: $value;
  -moz-box-shadow: $value;
  box-shadow: $value;
}

@mixin slider_border-radius($value) {
  -webkit-border-radius: $value;
  -moz-border-radius: $value;
  border-radius: $value;
}

.slider {
  display: inline-block;
  vertical-align: middle;
  position: relative;

  &.slider-horizontal {
    width: $slider-horizontal-width;
    height: $slider-line-height;

    .slider-track {
      height: $slider-line-height/2;
      width: 100%;
      margin-top: -$slider-line-height/4;
      top: 50%;
      left: 0;
    }

    .slider-selection, .slider-track-low, .slider-track-high {
      height: 100%;
      top: 0;
      bottom: 0;
    }

    .slider-tick,
    .slider-handle {
      margin-left: -$slider-line-height/2;

      &.triangle {
        position: relative;
        top: 50%;
        transform: translateY(-50%);
        border-width: 0 $slider-line-height/2 $slider-line-height/2 $slider-line-height/2;
        width: 0;
        height: 0;
        border-bottom-color: $slider-primary-bottom;
        margin-top: 0;
      }
    }

    .slider-tick-container {
      white-space: nowrap;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
    }

    .slider-tick-label-container {
      white-space: nowrap;
      margin-top: $slider-line-height;

      .slider-tick-label {
        display: inline-block;
        padding-top: $slider-line-height * 1.2;
        text-align: center;
      }
    }

    &.slider-rtl {
      .slider-track {
        left: initial;
        right: 0;
      }

      .slider-tick,
      .slider-handle {
        margin-left: initial;
        margin-right: -$slider-line-height/2;
      }

      .slider-tick-container {
        left: initial;
        right: 0;
      }
    }
  }

  &.slider-vertical {
    height: $slider-vertical-height;
    width: $slider-line-height;

    .slider-track {
      width: $slider-line-height/2;
      height: 100%;
      left: 25%;
      top: 0;
    }

    .slider-selection {
      width: 100%;
      left: 0;
      top: 0;
      bottom: 0;
    }

    .slider-track-low, .slider-track-high {
      width: 100%;
      left: 0;
      right: 0;
    }

    .slider-tick,
    .slider-handle {
      margin-top: -$slider-line-height/2;

      &.triangle {
        border-width: $slider-line-height/2 0 $slider-line-height/2 $slider-line-height/2;
        width: 1px;
        height: 1px;
        border-left-color: $slider-primary-bottom;
        margin-left: 0;
      }
    }

    .slider-tick-label-container {
      white-space: nowrap;

      .slider-tick-label {
        padding-left: $slider-line-height * .2;
      }
    }

    &.slider-rtl {
      .slider-track {
        left: initial;
        right: 25%;
      }

      .slider-selection {
        left: initial;
        right: 0;
      }

      .slider-tick,
      .slider-handle {
        &.triangle {
          border-width: $slider-line-height/2 $slider-line-height/2 $slider-line-height/2 0;
        }
      }

      .slider-tick-label-container {
        .slider-tick-label {
          padding-left: initial;
          padding-right: $slider-line-height * .2;
        }
      }
    }
  }

  &.slider-disabled {
    .slider-handle {
      @include slider_background-image($slider-gray-2, $slider-gray-1, mix($slider-gray-2, $slider-gray-1));
    }

    .slider-track {
      @include slider_background-image($slider-gray-3, $slider-gray-4, mix($slider-gray-3, $slider-gray-4));
      cursor: not-allowed;
    }
  }

  input {
    display: none;
  }

  .tooltip-inner {
    white-space: nowrap;
    max-width: none;
  }

  .tooltip {
    pointer-events: none;

    &.top {
      margin-top: -36px;
    }
  }

  .tooltip-inner {
    white-space: nowrap;
    max-width: none;
  }

  .hide {
    display: none;
  }
}

.slider-track {
  @include slider_background-image($slider-gray-5, $slider-gray-6, mix($slider-gray-5, $slider-gray-6));
  @include slider_box-shadow(inset 0 1px 2px rgba(0, 0, 0, 0.1));
  @include slider_border-radius($slider-border-radius);

  position: absolute;
  cursor: pointer;
}

.slider-selection {
  @include slider_background-image($slider-gray-6, $slider-gray-5, mix($slider-gray-6, $slider-gray-5));
  @include slider_box-shadow(inset 0 -1px 0 rgba(0, 0, 0, 0.15));
  @include slider_box-sizing(border-box);
  @include slider_border-radius($slider-border-radius);

  position: absolute;
}

.slider-selection.tick-slider-selection {
  @include slider_background-image($slider-secondary-top, $slider-secondary-bottom, mix($slider-secondary-top, $slider-secondary-bottom));
}

.slider-track-low, .slider-track-high {
  @include slider_box-sizing(border-box);
  @include slider_border-radius($slider-border-radius);

  position: absolute;
  background: transparent;
}

.slider-handle {
  @include slider_background-image($slider-primary-top, $slider-primary-bottom, mix($slider-primary-top, $slider-primary-bottom));
  @include slider_box-shadow(inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05));

  position: absolute;
  top: 0;
  width: $slider-line-height;
  height: $slider-line-height;
  background-color: $slider-primary;
  border: 0px solid transparent;

  &:hover {
    cursor: pointer;
  }

  &.round {
    @include slider_border-radius($slider-line-height);
  }

  &.triangle {
    background: transparent none;
  }

  &.custom {
    background: transparent none;

    &::before {
      line-height: $slider-line-height;
      font-size: 20px;
      content: '\2605'; //unicode star character
      color: $slider-unicode-color;
    }
  }
}

.slider-tick {
  @include slider_background-image($slider-gray-5, $slider-gray-6, mix($slider-gray-5, $slider-gray-6));
  @include slider_box-shadow(inset 0 -1px 0 rgba(0, 0, 0, 0.15));
  @include slider_box-sizing(border-box);

  position: absolute;
  cursor: pointer;
  width: $slider-line-height;
  height: $slider-line-height;
  filter: none;
  opacity: 0.8;
  border: 0px solid transparent;

  &.round {
    border-radius: 50%;
  }

  &.triangle {
    background: transparent none;
  }

  &.custom {
    background: transparent none;

    &::before {
      line-height: $slider-line-height;
      font-size: 20px;
      content: '\2605'; //unicode star character
      color: $slider-unicode-color;
    }
  }

  &.in-selection {
    @include slider_background-image($slider-secondary-top, $slider-secondary-bottom, mix($slider-secondary-top, $slider-secondary-bottom));
    opacity: 1;
  }
}

