////
///
/// Jiggle Animations Mixin Module
/// ===========================================================================
///
/// Provides quick, nervous jiggling animations for horizontal and vertical
/// movement. Includes rotation variants and customizable amplitude. Useful
/// for error states, notifications, and playful interactions.
///
/// @group Animations
/// @author Scape Agency
/// @link https://move.gl
/// @since 0.1.0 initial release
/// @access public
///
////


// ============================================================================
// Use
// ============================================================================

@use "../../dev" as *;
@use "../../variables" as *;
@use "../keyframes" as *;
@use "base" as *;


// ============================================================================
// Mixins
// ============================================================================


///
/// Jiggle Animation
/// ---------------------------------------------------------------------------
/// Creates a horizontal jiggle animation where the element moves left and
/// right.
///
/// @name animate_jiggle
/// @param {Length} $amplitude [5px] - Distance the element moves
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Basic usage
///   .error-input {
///     @include animate_jiggle;
///   }
///
@mixin animate_jiggle(
    $amplitude: 5px,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_jiggle,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @include keyframes_animate_jiggle($amplitude);
}


///
/// Vertical Jiggle Animation
/// ---------------------------------------------------------------------------
/// Creates a vertical jiggle animation where the element moves up and down.
///
/// @name animate_jiggle_vertical
/// @param {Length} $amplitude [5px] - Distance the element moves
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .notification {
///     @include animate_jiggle_vertical;
///   }
///
@mixin animate_jiggle_vertical(
    $amplitude: 5px,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_jiggle_vertical,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @include keyframes_animate_jiggle_vertical($amplitude);
}



///
/// Multi-Directional Jiggle Animation
/// ---------------------------------------------------------------------------
/// Creates a jiggle animation where the element moves in both X and Y
/// directions.
///
/// @name animate_jiggle_multi
/// @param {Length} $amplitude [5px] - Distance the element moves
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .playful-icon {
///     @include animate_jiggle_multi;
///   }
///
@mixin animate_jiggle_multi(
    $amplitude: 5px,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_jiggle_multi,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @include keyframes_animate_jiggle_multi($amplitude);
}


///
/// Gentle Jiggle Animation
/// ---------------------------------------------------------------------------
/// Creates a gentler jiggle animation with slower transitions.
///
/// @name animate_jiggle_slow
/// @param {Length} $amplitude [3px] - Distance the element moves
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .subtle-notification {
///     @include animate_jiggle_slow;
///   }
///
@mixin animate_jiggle_slow(
    $amplitude: 3px,
    $duration: $animate_base_duration,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_jiggle_slow,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @include keyframes_animate_jiggle_slow($amplitude);
}
