@import '../colors.css';
@import '../variables.css';
@import './config.css';

.linear {
  background: var(--color-divider);
  display: inline-block;
  height: var(--progress-height);
  overflow: hidden;
  position: relative;
  width: 100%;

  &.indeterminate .value {
    animation: linear-indeterminate-bar 1s linear infinite;
    transform-origin: center center;
  }
}

.value,
.buffer {
  bottom: 0;
  left: 0;
  position: absolute;
  right: 0;
  top: 0;
  transform: scaleX(0);
  transform-origin: left center;
  transition-duration: var(--animation-duration);
  transition-timing-function: var(--animation-curve-default);
}

.value {
  background-color: var(--progress-main-color);
}

.buffer {
  background-image:
    linear-gradient(to right, var(--progress-secondary-color), var(--progress-secondary-color)),
    linear-gradient(to right, var(--progress-main-color), var(--progress-main-color));
}

.circular {
  display: inline-block;
  height: calc(var(--circle-wrapper-width) * 1px);
  position: relative;
  transform: rotate(-90deg);
  width: calc(var(--circle-wrapper-width) * 1px);

  &.indeterminate {
    & .circle {
      animation: circular-indeterminate-bar-rotate 2s linear infinite;
    }

    & .path {
      animation: circular-indeterminate-bar-dash 1.5s ease-in-out infinite;
      stroke-dasharray: calc(var(--scale-ratio) * 1), calc(var(--scale-ratio) * 200);
      stroke-dashoffset: 0;
    }

    &.multicolor .path {
      animation:
        circular-indeterminate-bar-dash 1.5s ease-in-out infinite,
        colors calc(1.5s * 4) ease-in-out infinite;
    }
  }
}

.circular[disabled],
.linear[disabled] {
  & .value {
    background-color: var(--progress-disabled-color);
  }

  & .buffer {
    background-image:
      linear-gradient(to right, var(--progress-secondary-color), var(--progress-secondary-color)),
      linear-gradient(to right, var(--progress-disabled-color), var(--progress-disabled-color));
  }
}

.circle {
  height: 100%;
  width: 100%;
}

.path {
  fill: none;
  stroke: var(--progress-main-color);
  stroke-dasharray: 0, calc(var(--scale-ratio) * 200);
  stroke-dashoffset: 0;
  stroke-linecap: round;
  stroke-miterlimit: 20;
  stroke-width: 4;
  transition: stroke-dasharray var(--animation-duration) var(--animation-curve-default);
}

@keyframes linear-indeterminate-bar {
  0% {
    transform: translate(-50%) scaleX(0);
  }

  50% {
    transform: translate(-0%) scaleX(0.3);
  }

  100% {
    transform: translate(50%) scaleX(0);
  }
}

@keyframes circular-indeterminate-bar-rotate {
  100% {
    transform: rotate(360deg);
  }
}

@keyframes circular-indeterminate-bar-dash {
  0% {
    stroke-dasharray: calc(var(--scale-ratio) * 1), calc(var(--scale-ratio) * 200);
    stroke-dashoffset: calc(var(--scale-ratio) * 0);
  }

  50% {
    stroke-dasharray: calc(var(--scale-ratio) * 89), calc(var(--scale-ratio) * 200);
    stroke-dashoffset: calc(var(--scale-ratio) * -35);
  }

  100% {
    stroke-dasharray: calc(var(--scale-ratio) * 89), calc(var(--scale-ratio) * 200);
    stroke-dashoffset: calc(var(--scale-ratio) * -124);
  }
}

@keyframes colors {
  0% {
    stroke: #4285f4;
  }

  25% {
    stroke: #de3e35;
  }

  50% {
    stroke: #f7c223;
  }

  75% {
    stroke: #1b9a59;
  }

  100% {
    stroke: #4285f4;
  }
}
