@use 'sass:math';

@import './var.scss';

:root {
    --loading-color: #{$loading-color};
    --loading-size: #{$loading-size};
    --loading-animation-duration: #{$loading-animation-duration};
    --loading-text-color: #{$loading-text-color};
    --loading-text-font-size: #{$loading-text-font-size};
    --loading-text-margin: #{$loading-text-margin};
}

.jing-loading {
    position: relative;
    color: var(--loading-color);
    font-size: 0;
    vertical-align: middle;

    &__icon {
        position: relative;
        display: inline-block;
        width: var(--loading-size);
        max-width: 100%;
        height: var(--loading-size);
        vertical-align: middle;
        animation: jing-rotate var(--loading-animation-duration) linear infinite;

        &--spinner {
            animation-timing-function: steps(12);
        }

        &--circular {
            animation-duration: 2s;
        }
    }

    &__line {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;

        &::before {
            content: ' ';
            display: block;
            width: 2px;
            height: 25%;
            margin: 0 auto;
            background-color: currentColor;
            border-radius: 40%;
        }

        @for $num from 1 through 12 {
            &:nth-child(#{$num}) {
                transform: rotate($num * 30deg);
                opacity: 1- (math.div(0.75, 12)) * ($num - 1);
            }
        }
    }

    &__circular {
        display: block;
        width: 100%;
        height: 100%;

        circle {
            animation: jing-circular 1.5s ease-in-out infinite;
            stroke: currentColor;
            stroke-width: 3;
            stroke-linecap: round;
        }
    }

    &__text {
        display: inline-block;
        margin-left: var(--loading-text-margin);
        color: var(--loading-text-color);
        font-size: var(--loading-text-font-size);
        vertical-align: middle;
    }

    &--vertical {
        display: flex;
        flex-direction: column;
        align-items: center;

        .jing-loading__text {
            margin: var(--loading-text-margin) 0 0;
        }
    }
}

/* generated by https://loading.io/ */

@keyframes jing-circular {
    0% {
        stroke-dasharray: 1, 200;
        stroke-dashoffset: 0;
    }

    50% {
        stroke-dasharray: 90, 150;
        stroke-dashoffset: -40;
    }

    100% {
        stroke-dasharray: 90, 150;
        stroke-dashoffset: -120;
    }
}
