@use "../../../variables/index" as *;

@use "../../mixins/gradients";
@use "../../mixins/progress-bar";

/**
 * Progress Bars - Progress indicator component
 *
 * Note: Uses $progress-* and $line-height-computed variables.
 *
 * Intentionally hardcoded values:
 * - Background positions (40px, 0): Animation stripe pattern positioning
 * - Box-shadow values (1px, 2px, -1px): Shadow depth and positioning
 * - Background-size (40px 40px): Stripe pattern dimensions
 * - Animation duration (2s): Animation timing
 * - Transition duration (0.6s): Animation timing
 * - RGBA values: Shadow opacity
 * - Percentages: Width values
 */

@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

// Spec and IE10+
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

// Bar itself
.progress {
  overflow: hidden;
  margin-bottom: $line-height-computed;
  height: $line-height-computed;
  border-radius: $progress-border-radius;
  background-color: $progress-bg;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}

// Bar of progress
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  background-color: $progress-bar-bg;
  color: $progress-bar-color;
  text-align: center;
  font-size: $font-size-small;
  line-height: $line-height-computed;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  transition: width 0.6s ease;
}

// Striped bars
// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the
// `.progress-bar-striped` class, which you just add to an existing `.progress-bar`.
.progress-striped .progress-bar,
.progress-bar-striped {
  background-size: 40px 40px;

  @include gradients.gradient-striped();
}

// Call animation for the active one
// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the `.progress-bar.active` approach.
.progress.active .progress-bar,
.progress-bar.active {
  animation: progress-bar-stripes 2s linear infinite;
}

// Variations
.progress-bar-success {
  @include progress-bar.progress-bar-variant($progress-bar-success-bg);
}

.progress-bar-info {
  @include progress-bar.progress-bar-variant($progress-bar-info-bg);
}

.progress-bar-warning {
  @include progress-bar.progress-bar-variant($progress-bar-warning-bg);
}

.progress-bar-danger {
  @include progress-bar.progress-bar-variant($progress-bar-danger-bg);
}