@charset 'UTF-8';

////
/// Flavor SCSS Mixins Will Change
/// @group mixins-will-change
/// @author blackmirror1980
////

/// Will Change modes
///
/// @access private
/// @type list
$will-change-modes: array-concat((auto, scroll-position, contents, transform, opacity, unset), $animateable-properties, $css-default-modes);

/// Checks if something is a will-change value
///
/// @access public
/// @param {string | list} $wc - the will-change value (e.g. `auto` or `left, top`)
/// @return {boolean} - true if is a will-change value
@function is-will-change($wc) {
  @if is-defined($wc) {
    @if list-separator($wc) != comma {
      $wc: ($wc,);
    }

    $is-will-change-valid: true;

    @each $will-change-value in $wc {
      @if $is-will-change-valid {
        $is-will-change-valid: array-contains($will-change-modes, $will-change-value);
      }
    }

    @return $is-will-change-valid;
  }

  @return false;
}

/// Will Change
///
/// @example scss - Usage
///   .will-change-element {
///     @include will-change(scroll-position);
///   }
///
/// @example css - Output
///   .will-change-element {
///     will-change: scroll-position;
///   }
///
/// @example scss - Usage
///   .will-change-element {
///     @include will-change(left, top);
///   }
///
/// @example css - Output
///   .will-change-element {
///     will-change: left, top;
///   }
///
/// @access public
/// @param {string | array | list} $wc - the will-change value (e.g. `auto` or `left, top`)
@mixin will-change($wc...) {
  @if is-defined($wc) {
    @if is-will-change($wc) {
      will-change: $wc;
    }
    @else {
      @warn '`will-change: #{$wc}` is not a valid will-change value';
    }
  }
}
