/* ------------------------------------------------------------------------------
 *
 *  # Nav components
 *
 *  Overrides for nav components
 *
 * ---------------------------------------------------------------------------- */


// Base styles
// -------------------------

// Links
.nav-link {
    position: relative;
    @include transition(all ease-in-out $component-transition-timer);

    // Remove outline
    &:focus {
        outline: 0;
    }

    // Remove ugly dotted border in FF
    &::-moz-focus-inner {
        border: 0;
    }

    // Disabled state
    &.disabled {
        cursor: $cursor-disabled;
    }
}


// Tabs
// -------------------------

// Base
.nav-tabs {
    margin-bottom: $spacer;

    // Link
    .nav-link {
        border-top-left-radius: 0;
        border-top-right-radius: 0;
        color: $nav-tabs-link-color;

        // Hover state
        @include hover-focus {
            color: $nav-tabs-link-hover-color;
        }

        // Disabled state
        &.disabled {
            color: $nav-link-disabled-color;
        }
    }

    // When dropdown is opened
    .nav-item.show .nav-link:not(.active) {
        border-color: transparent;
        background-color: transparent;
    }

    // Apply border color for border helper
    &.border-top-1 {
        border-top-color: $nav-tabs-border-color;
    }
}

// Responsive tabs - add this class to parent container
// to make tabs nav inline, add scrollbar and prevent wrapping
.nav-tabs-responsive {
    overflow-x: auto;
    box-shadow: 0 (-$nav-tabs-border-width) 0 $nav-tabs-border-color inset;
}


//
// Alternative styles
//

// Commmon
.nav-tabs-highlight,
.nav-tabs-top,
.nav-tabs-bottom {
    .nav-link {
        position: relative;

        // Highlight
        &:before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            @include transition(background-color ease-in-out $component-transition-timer);
        }
    }
}

// Top highlight
.nav-tabs-highlight {

    // Link
    .nav-link {
        border-top-color: transparent;
        @include border-top-radius(0);

        // Top highlight line
        &:before {
            height: $nav-tabs-highlight-link-border-width;
            top: -($nav-tabs-border-width);
            left: -($nav-tabs-border-width);
            right: -($nav-tabs-border-width);
        }
    }

    // Active state
    .nav-link.active {
        &:before {
            background-color: $nav-tabs-highlight-link-border-color;
        }
    }
}

// Tabs with top border
.nav-tabs-top {

    // Item
    .nav-item {
        margin-bottom: 0;
    }

    // Link
    .nav-link {
        border-width: 0;
        @include border-top-radius(0);

        // Hover state
        @include hover-focus {
            &:before {
                background-color: $nav-tabs-border-color;
            }
        }

        // Bottom highlight line
        &:before {
            height: $nav-tabs-top-link-border-width;
        }

        // Remove highlight in disabled items
        &.disabled {
            &:before {
                content: none;
            }
        }
    }

    // When dropdown is opened
    .nav-item.show .nav-link:not(.active) {
        &:before {
            background-color: $nav-tabs-border-color;
        }
    }

    // Active state
    .nav-link.active {
        &:before {
            background-color: $nav-tabs-top-link-border-color;
        }
    }
    .nav-link.active,
    .nav-item.show .nav-link {
        background-color: transparent;
    }

    // Make sure dropdown comes after bottom border
    .dropdown-menu {
        margin-top: 0;
    }

    // Border helper adjustment
    &.border-top-1 {
        .nav-item {
            margin-top: -($nav-tabs-border-width);
        }
    }
}

// Tabs with bottom border
.nav-tabs-bottom {

    // Item
    .nav-item {
        margin-bottom: 0;
    }

    // Link
    .nav-link {
        border-width: 0;

        // Bottom highlight line
        &:before {
            height: $nav-tabs-bottom-link-border-width;
            top: auto;
            bottom: -($nav-tabs-border-width);
        }
    }

    // Active state
    .nav-link.active {
        &:before {
            background-color: $nav-tabs-bottom-link-border-color;
        }
    }
    .nav-link.active,
    .nav-item.show .nav-link {
        background-color: transparent;
    }

    // Make sure dropdown comes after bottom border
    .dropdown-menu {
        margin-top: 0;
    }
}

// Tabs with darker background color
.nav-tabs-solid {
    background-color: $nav-tabs-solid-bg;
    border: $nav-tabs-border-width solid $nav-tabs-border-color;

    // Item
    .nav-item {
        margin-bottom: 0;
    }

    // Link
    .nav-link {
        border-width: 0;
    }

    // When dropdown is opened
    .nav-item.show .nav-link {
        background-color: transparent;
    }

    // Active state
    .nav-link.active,
    .nav-item.show .nav-link.active {
        color: $nav-tabs-solid-active-color;
        background-color: $nav-tabs-solid-active-bg;
    }

    // Custom background color
    &[class*=bg-]:not(.bg-light):not(.bg-white):not(.bg-transparent) {
        .nav-link {
            color: rgba($white, 0.9);

            @include hover-focus {
                color: $white;
            }

            &.disabled {
                color: rgba($white, 0.6);
            }
        }

        .nav-item.show .nav-link {
            color: $white;
        }

        .nav-link.active,
        .nav-item.show .nav-link.active {
            color: $white;
            background-color: rgba($black, 0.1);
        }

        + .tab-content[class*=bg-] {
            border-top-color: rgba($white, 0.5);
        }
    }
}

// Vertical tabs
.nav-tabs-vertical {

    // Link
    .nav-link {
        justify-content: flex-start;

        // Override border colors
        &,
        &:hover,
        &:focus,
        &.disabled {
            border-color: transparent $nav-tabs-border-color transparent transparent;
        }

        // Highlight
        &:before {
            content: '';
            position: absolute;
            top: -$nav-tabs-border-width;
            bottom: -$nav-tabs-border-width;
            left: -$nav-tabs-border-width;
            width: $nav-tabs-highlight-link-border-width;
            @include transition(background-color ease-in-out $component-transition-timer);
        }
    }

    // When dropdown is opened
    .nav-item.show .nav-link:not(.active) {
        border-right-color: $nav-tabs-border-color;
        border-bottom-color: transparent;
    }

    // Right alignment
    &-right {
        .nav-link {
            &,
            &:hover,
            &:focus,
            &.disabled {
                border-color: transparent transparent transparent $nav-tabs-border-color;
            }

            // Reverse highlight line alignment
            &:before {
                left: auto;
                right: -$nav-tabs-border-width;
            }
        }

        // Opened dropdown - toggle link
        .nav-item.show .nav-link:not(.active) {
            border-right-color: transparent;
            border-left-color: $nav-tabs-border-color;
        }
    }

    // Active state
    .nav-link.active {
        &:before {
            background-color: $nav-tabs-highlight-link-border-color;
        }
    }
    .nav-link.active,
    .nav-item.show .nav-link {
        background-color: transparent;
        border-color: $nav-tabs-border-color transparent;
    }
}



// Pills
// -------------------------

// Base
.nav-pills {
    margin-bottom: $spacer;

    // Link
    .nav-link {
        color: $nav-pills-link-color;

        // Hover state
        &:not(.active) {
            @include hover-focus {
                color: $nav-pills-link-hover-color;
            }
        }

        // Active state
        // - change badge color according to active link bg 
        &.active {
            @if (lightness($nav-pills-link-active-bg) < 75) {
                .badge:not(.bg-transparent):not(.bg-light):not(.bg-white) {
                    background-color: $white;
                    color: $nav-pills-link-hover-color;
                    @include transition(all ease-in-out $component-transition-timer);
                }
            }
        }

        // Disabled state
        &.disabled {
            @include plain-hover-focus {
                color: $nav-link-disabled-color;
            }
        }
    }

    // Link with opened dropdown
    .nav-item.show .nav-link:not(.active) {
        color: $nav-pills-link-hover-color;
        background-color: transparent;
    }

    // Stick text to the left in stacked pills
    &.flex-column {
        .nav-link {
            justify-content: flex-start;
        }
    }
}


//
// Alternative styles
//

// Bordered pills
.nav-pills-bordered {

    // Item
    .nav-item + .nav-item {
        margin-left: ($spacer / 2);
    }

    // Link
    .nav-link {
        border: $nav-pills-bordered-border-width solid $nav-pills-bordered-border-color;
    }

    // Hover state
    .nav-link:not(.active):hover,
    .nav-link:not(.active):focus,
    .nav-item.show .nav-link:not(.active) {
        background-color: $nav-pills-bordered-link-hover-color;
    }

    // Active state
    .nav-link.active {
        border-color: $nav-pills-link-active-bg;
    }

    // Disabled state
    .nav-link.disabled {
        @include plain-hover-focus {
            background-color: $nav-pills-bordered-disabled-bg;
        }
    }

    // Stacked pills layout
    &.flex-column {
        .nav-item + .nav-item {
            margin-left: 0;
            margin-top: ($spacer / 2);
        }
    }
}

// Pills toolbar
.nav-pills-toolbar {

    // Item
    .nav-item + .nav-item {
        margin-left: -($nav-pills-bordered-border-width);
    }

    // Link
    .nav-link {
        border-radius: 0;

        // Active state
        &.active {
            z-index: 3;
        }
    }

    // Add rounded corners
    .nav-item {
        &:first-child {
            .nav-link {
                @include border-left-radius($border-radius);
            }
        }
        &:last-child {
            .nav-link {
                @include border-right-radius($border-radius);
            }
        }
    }

    // Stacked pills layout
    &.flex-column {
        .nav-item {
            &:first-child {
                .nav-link {
                    @include border-left-radius(0);
                    @include border-top-radius($border-radius);
                }
            }
            &:last-child {
                .nav-link {
                    @include border-right-radius(0);
                    @include border-bottom-radius($border-radius);
                }
            }
            + .nav-item {
                margin-left: 0;
                margin-top: -($nav-pills-bordered-border-width);
            }
        }
    }
}
