@use 'sass:meta';

/// Uses @supports queries and a hack using `@-moz-document url-prefix()` to
/// apply the given styles to either all version of Gecko based Mozilla browsers,
/// only Quantam (Stylo) Mozilla browsers, or only legacy (pre-Stylo) Mozilla
/// browsers.
///
/// @param {Bool | String} $target-versions [null] - Pass nothing, `null`,
/// `false`, `both`, `none` or `no` to not target any specific version of Gecko
/// based Mozilla browsers (basically targetting all of them). To target
/// only newer, Quantam Mozilla browsers, pass `quantam`, `q`, `new`, `modern`,
/// `stylo`, or `green`. To target Legacy (pre-Stylo) Mozilla browsers, pass
/// `true`, `legacy`, `old`, or `pre-stylo`.
///
/// @content Styles to apply to Gecko-based Mozilla browsers.
///
/// @group Utilities
@mixin only-moz($target-versions: null) {
  @if $target-versions and meta.type-of($target-versions) == 'string' {
    $target-versions: string.to-lower-case($target-versions);
  }

  @if not $target-versions or
      $target-versions == 'false' or
      $target-versions == 'f' or
      $target-versions == 'all' or
      $target-versions == 'both' or
      $target-versions == 'none' or
      $target-versions == 'no' or
      $target-versions == 'n'
  {
    @-moz-document url-prefix() {
      @content;
    }
  } @else if $target-versions == 'quantam' or
      $target-versions == 'quant'
      $target-versions == 'q'
      $target-versions == 'new' or
      $target-versions == 'stylo' or
      $target-versions == 'modern' or
      $target-versions == 'green'
  {
    @-moz-document url-prefix() {
      @supports (animation: calc(0s)) {
        @content;
      }
    }
  } @else if $target-versions == true or
      $target-versions == 'true' or
      $target-versions == 't' or
      $target-versions == 'legacy' or
      $target-versions == 'old' or
      $target-versions == 'pre-stylo' or
      $target-versions == 'pre stylo' or
      $target-versions == 'prestylo'
  {
    @-moz-document url-prefix() {
      @supports not (animation: calc(0s)) {
        @content;
      }
    }
  } @else {
    @warn 'You have passed an unknown keyword value of ' +
        '#{meta.inspect($target-versions)}} to the [ only-moz() ] mixin. ' +
        'Ignoring the parameter and targeting all Gecko-based Mozilla ' +
        'browsers.';
  }
}

/// Uses @supports queries and a hack using `@-moz-document url-prefix()` to
/// apply the given styles to either all version of Gecko based Mozilla browsers,
/// only Quantam (Stylo) Mozilla browsers, or only legacy (pre-Stylo) Mozilla
/// browsers.
///
/// @param {Bool | String} $target-versions [null] - Pass nothing, `null`,
/// `false`, `both`, `none` or `no` to not target any specific version of Gecko
/// based Mozilla browsers (basically targetting all of them). To target
/// only newer, Quantam Mozilla browsers, pass `quantam`, `q`, `new`, `modern`,
/// `stylo`, or `green`. To target Legacy (pre-Stylo) Mozilla browsers, pass
/// `true`, `legacy`, `old`, or `pre-stylo`.
///
/// @content Styles to apply to Gecko-based Mozilla browsers.
///
/// @group Utilities
/// @require {mixin} only-moz
/// @alias only-moz
@mixin moz-only($target-versions: null) {
  @include only-moz($target-versions) {
    @content;
  }
}

/// Uses @supports queries and a hack using `@-moz-document url-prefix()` to
/// apply the given styles to either all version of Gecko based Mozilla browsers,
/// only Quantam (Stylo) Mozilla browsers, or only legacy (pre-Stylo) Mozilla
/// browsers.
///
/// @param {Bool | String} $target-versions [null] - Pass nothing, `null`,
/// `false`, `both`, `none` or `no` to not target any specific version of Gecko
/// based Mozilla browsers (basically targetting all of them). To target
/// only newer, Quantam Mozilla browsers, pass `quantam`, `q`, `new`, `modern`,
/// `stylo`, or `green`. To target Legacy (pre-Stylo) Mozilla browsers, pass
/// `true`, `legacy`, `old`, or `pre-stylo`.
///
/// @content Styles to apply to Gecko-based Mozilla browsers.
///
/// @group Utilities
/// @require {mixin} only-moz
/// @alias only-moz
@mixin target-moz($target-versions: null) {
  @include only-moz($target-versions) {
    @content;
  }
}
