//
// Copyright IBM Corp. 2021
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//

@use '../../config' as *;
@use '../../layer' as *;
@use '../../motion' as *;
@use '../../spacing' as *;
@use '../../theme' as *;
@use '../../type' as *;
@use '../../utilities/convert';
@use '../../utilities/visually-hidden' as *;
@use '../../utilities/layout';
@use '../../utilities/high-contrast-mode' as *;

/// Progress Bar styles
/// @access public
/// @group progress-bar
@mixin progress-bar {
  .#{$prefix}--progress-bar {
    @include layout.use('density', $default: 'normal');
  }

  .#{$prefix}--progress-bar__label {
    @include type-style('body-compact-01');

    display: flex;
    justify-content: space-between;
    color: $text-primary;
    margin-block-end: $spacing-03;
    min-inline-size: convert.to-rem(48px);
  }

  .#{$prefix}--progress-bar__label-text {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .#{$prefix}--progress-bar__track {
    position: relative;
    background-color: $layer;
    block-size: convert.to-rem(8px);
    inline-size: 100%;
    min-inline-size: convert.to-rem(48px);
  }

  .#{$prefix}--progress-bar--big .#{$prefix}--progress-bar__track {
    block-size: convert.to-rem(8px);
  }

  .#{$prefix}--progress-bar--small .#{$prefix}--progress-bar__track {
    block-size: convert.to-rem(4px);
  }

  .#{$prefix}--progress-bar__bar {
    display: block;
    background-color: currentColor;
    block-size: 100%;
    color: $interactive;
    inline-size: 100%;
    transform: scaleX(0);
    transform-origin: 0 center;
    transition: transform $duration-fast-02 motion(standard, productive);
  }

  [dir='rtl'] .#{$prefix}--progress-bar__bar {
    transform-origin: 100% center;
  }

  .#{$prefix}--progress-bar--indeterminate
    .#{$prefix}--progress-bar__track::after {
    position: absolute;
    animation-duration: 1400ms;
    animation-iteration-count: infinite;
    animation-name: #{$prefix}--progress-bar-indeterminate;
    animation-timing-function: linear;
    background-image: linear-gradient(
      90deg,
      $interactive 12.5%,
      transparent 12.5%
    );
    background-position-x: 0%;
    background-size: 200% 100%;
    content: '';
    inset: 0;
  }

  [dir='rtl']
    .#{$prefix}--progress-bar--indeterminate
    .#{$prefix}--progress-bar__track::after {
    animation-name: #{$prefix}--progress-bar-indeterminate-rtl;
  }

  .#{$prefix}--progress-bar__helper-text {
    @include type-style('helper-text-01');

    color: $text-secondary;

    margin-block-start: $spacing-03;
  }

  .#{$prefix}--progress-bar__status-icon {
    flex-shrink: 0;
    margin-inline-start: layout.density('padding-inline');
  }

  .#{$prefix}--progress-bar--finished .#{$prefix}--progress-bar__bar,
  .#{$prefix}--progress-bar--finished .#{$prefix}--progress-bar__status-icon {
    color: $support-success;
  }

  .#{$prefix}--progress-bar--error .#{$prefix}--progress-bar__bar,
  .#{$prefix}--progress-bar--error .#{$prefix}--progress-bar__status-icon {
    color: $support-error;
  }

  .#{$prefix}--progress-bar--error .#{$prefix}--progress-bar__helper-text {
    color: $text-error;
  }

  .#{$prefix}--progress-bar--finished .#{$prefix}--progress-bar__bar,
  .#{$prefix}--progress-bar--error .#{$prefix}--progress-bar__bar {
    transform: scaleX(1);
  }

  .#{$prefix}--progress-bar--finished.#{$prefix}--progress-bar--inline
    .#{$prefix}--progress-bar__track,
  .#{$prefix}--progress-bar--error.#{$prefix}--progress-bar--inline
    .#{$prefix}--progress-bar__track {
    @include visually-hidden;
  }

  .#{$prefix}--progress-bar--finished.#{$prefix}--progress-bar--inline
    .#{$prefix}--progress-bar__label,
  .#{$prefix}--progress-bar--error.#{$prefix}--progress-bar--inline
    .#{$prefix}--progress-bar__label {
    flex-shrink: 1;
    justify-content: flex-start;
    margin-inline-end: 0;
  }

  @keyframes #{$prefix}--progress-bar-indeterminate {
    0% {
      background-position-x: 25%;
    }

    80%,
    100% {
      background-position-x: -105%;
    }
  }

  @keyframes #{$prefix}--progress-bar-indeterminate-rtl {
    0% {
      background-position-x: -105%;
    }

    80%,
    100% {
      background-position-x: 25%;
    }
  }

  .#{$prefix}--progress-bar--inline {
    display: flex;
    align-items: center;
  }

  .#{$prefix}--progress-bar--inline .#{$prefix}--progress-bar__label {
    flex-shrink: 0;
    margin-block-end: 0;
    margin-inline-end: layout.density('padding-inline');
  }

  .#{$prefix}--progress-bar--inline .#{$prefix}--progress-bar__track {
    flex-basis: 0;
    flex-grow: 1;
  }

  .#{$prefix}--progress-bar--inline .#{$prefix}--progress-bar__helper-text {
    @include visually-hidden;
  }

  .#{$prefix}--progress-bar--indented .#{$prefix}--progress-bar__label,
  .#{$prefix}--progress-bar--indented .#{$prefix}--progress-bar__helper-text {
    padding-inline: layout.density('padding-inline');
  }

  //High Contrast Mode
  //Ensure ProgressBar is visible and animated in Windows HCM
  @include high-contrast-mode {
    .#{$prefix}--progress-bar__track {
      //According to https://developer.mozilla.org/en-US/docs/Web/CSS/system-color, in HCM, the
      //checkbox should be displayed using Canvas and CanvasText.
      background-color: Canvas;
      forced-color-adjust: none;
      outline: 2px solid rgba(0, 0, 0, 0);
      outline-offset: -2px;
    }

    .#{$prefix}--progress-bar__bar {
      background-color: CanvasText;
    }
  }
}
