@use "sass:map";
@use "../settings" as *;

@if map.get($modules, "components/progress") {
  /**
   * Progress
   */

  // Reboot based on :
  // - normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css
  // - sanitize.css v13.0.0 | CC0 1.0 Universal | github.com/csstools/sanitize.css
  // ––––––––––––––––––––

  // 1. Add the correct display in Edge 18- and IE
  // 2. Add the correct vertical alignment in Chrome, Edge, and Firefox
  #{$parent-selector} progress {
    display: inline-block; // 1
    vertical-align: baseline; // 2
  }

  // Pico
  // ––––––––––––––––––––

  #{$parent-selector} progress {
    // Reset the default appearance
    -webkit-appearance: none;
    -moz-appearance: none;

    // Styles
    display: inline-block;
    appearance: none;
    width: 100%;
    height: 0.5rem;
    margin-bottom: calc(var(#{$css-var-prefix}spacing) * 0.5);
    overflow: hidden;

    // Remove Firefox and Opera border
    border: 0;
    border-radius: var(#{$css-var-prefix}border-radius);
    background-color: var(#{$css-var-prefix}progress-background-color);

    // IE10 uses `color` to set the bar background-color
    color: var(#{$css-var-prefix}progress-color);

    &::-webkit-progress-bar {
      border-radius: var(#{$css-var-prefix}border-radius);
      background: none;
    }

    &[value]::-webkit-progress-value {
      background-color: var(#{$css-var-prefix}progress-color);

      @if $enable-transitions {
        transition: inline-size var(#{$css-var-prefix}transition);
      }
    }

    &::-moz-progress-bar {
      background-color: var(#{$css-var-prefix}progress-color);
    }

    // Indeterminate state
    @media (prefers-reduced-motion: no-preference) {
      &:indeterminate {
        background: var(#{$css-var-prefix}progress-background-color)
          linear-gradient(
            to right,
            var(#{$css-var-prefix}progress-color) 30%,
            var(#{$css-var-prefix}progress-background-color) 30%
          )
          top left / 150% 150% no-repeat;
        animation: progress-indeterminate 1s linear infinite;

        &[value]::-webkit-progress-value {
          background-color: transparent;
        }

        &::-moz-progress-bar {
          background-color: transparent;
        }
      }
    }
  }

  [dir="rtl"] {
    @media (prefers-reduced-motion: no-preference) {
      #{$parent-selector} progress:indeterminate {
        animation-direction: reverse;
      }
    }
  }

  @keyframes progress-indeterminate {
    0% {
      background-position: 200% 0;
    }

    100% {
      background-position: -200% 0;
    }
  }
}