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

.#{$prefix}-progress-bar {
  display: flex;
  align-items: center;
  font-size: var(--ty-progress-font-size);

  &__inner {
    flex: 1;
    position: relative;
    display: inline-block;
    vertical-align: middle;
    background-color: var(--ty-progress-trail-bg);
  }

  &__bg {
    position: relative;
    text-align: right;
    height: 100%;
    transition: all 0.6s;

    &_primary {
      background-color: var(--ty-progress-stroke-color-primary);
    }

    &_yellow {
      background-color: var(--ty-progress-stroke-color-warning);
    }

    &_blue {
      background-color: var(--ty-progress-stroke-color-info);
    }

    &_red {
      background-color: var(--ty-progress-stroke-color-danger);
    }

    &_green {
      background-color: var(--ty-progress-stroke-color-success);
    }
  }

  &__text {
    color: var(--ty-progress-text-color);
    margin-left: var(--ty-progress-text-offset);
    min-width: var(--ty-progress-text-min-width);
    text-align: right;
  }

  &__inner-text {
    color: var(--ty-progress-inner-text-color);
    font-size: var(--ty-progress-inner-text-font-size);
    margin: var(--ty-progress-inner-text-margin);
  }

  &__effect {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;

    &_striped {
      background-size: 20px 20px;
      background-image: linear-gradient(
        -45deg,
        rgb(255 255 255 / 15%) 25%,
        transparent 25%,
        transparent 50%,
        rgb(255 255 255 / 15%) 50%,
        rgb(255 255 255 / 15%) 75%,
        transparent 75%,
        transparent
      );
      animation: ty-progress-striped 2s linear infinite;
    }

    &_impulse {
      border-radius: inherit;
      opacity: 0;
      background: #fff;
      animation: ty-progress-impulse 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite;
    }
  }

  &_round {
    .#{$prefix}-progress-bar {
      &__inner,
      &__bg {
        border-radius: 100px;
      }
    }
  }

  &_square {
    .#{$prefix}-progress-bar {
      &__inner,
      &__bg {
        border-radius: 0;
      }
    }
  }
}

.#{$prefix}-progress-circle {
  display: inline-block;
  position: relative;

  &__bg {
    stroke: var(--ty-progress-circle-trail);
    fill: none;
  }

  &__path {
    fill: none;
    transition: stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease;

    &_primary {
      stroke: var(--ty-progress-stroke-color-primary);
    }

    &_yellow {
      stroke: var(--ty-progress-stroke-color-warning);
    }

    &_blue {
      stroke: var(--ty-progress-stroke-color-info);
    }

    &_red {
      stroke: var(--ty-progress-stroke-color-danger);
    }

    &_green {
      stroke: var(--ty-progress-stroke-color-success);
    }
  }

  &__text {
    position: absolute;
    width: 100%;
    text-align: center;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    font-size: var(--ty-progress-circle-text-font-size);
  }
}

@keyframes ty-progress-striped {
  0% {
    background-position: 0 0;
  }

  100% {
    background-position: 20px 0;
  }
}

@keyframes ty-progress-impulse {
  0% {
    opacity: 0.1;
    width: 0;
  }

  20% {
    opacity: 0.5;
    width: 0;
  }

  100% {
    opacity: 0;
    width: 100%;
  }
}
