@use '../increment/index' as *;
@use '../direction/index' as *;
@use '../dive/index' as *;
@use '../pseudo/index' as *;

@mixin generator(
    $label,
    $property,
    $value,
    $negatives,
    $directions,
    $increments,
    $dives,
    $pseudos,
    $multiples,
) {
    // Basic utilities
    .#{$label} {
        #{$property}: $value !important;
    }

    @if $multiples or $increments {
        .#{$label}-0 {
            #{$property}: 0 !important;
        }
    
        @if $negatives {
            .-#{$label} {
                #{$property}: -#{$value} !important;
            }
        }
    }

    // Modifier Utilities
    @if $increments {
        @include incrementify($label, $property, $value, $negatives, $increments, $pseudos, $dives);
    }

    @if $directions {
        @include directionify($label, $property, $value, $negatives, $increments, $pseudos, $dives);
    }

    @if $dives {
        @include diver($label, $property, $value);
    }

    @if $pseudos {
        @include pseudify($label, $property, $value, $pseudos);
    }
};
