/* ------------------------------------------------------------------------------
*
*  # Heading elmeents
*
*  Display default and custom components in page header and panel heading
*
*  Version: 1.3
*  Latest update: Aug 10, 2016
*
* ---------------------------------------------------------------------------- */


// Base
// -------------------------

// Heading elements toggler
.heading-elements-toggle {
    cursor: pointer;
    display: block;
    line-height: 1;
    position: absolute;
    top: 50%;
    right: 0;
    margin-top: -(@icon-font-size / 2);
}

// Breadcrumb toggler position
.breadcrumb-elements-toggle {
    float: right;
    cursor: pointer;
    line-height: 1;
    margin-top: ((((@breadcrumb-padding-vertical * 2) + @line-height-computed) - @icon-font-size) / 2);

    // Stand alone component
    .breadcrumb-line-component & {
        margin-right: @grid-gutter-width;
    }
}

// Common styles for togglers
.heading-elements-toggle,
.breadcrumb-elements-toggle {

    // Inherit colors
    &,
    &:hover,
    &:focus {
        color: inherit;
    }

    // Remove top edge frop icons
    > i {
        top: 0;
    }

    // Hide on desktop
    @media (min-width: @screen-sm-min) {
        display: none;
    }
}


// Heading elements base
.heading-elements {
    background-color: inherit;
    position: absolute;
    top: 50%;
    right: @grid-gutter-width;
    height: @input-height-base;
    margin-top: -(@input-height-base / 2);

    // Mobile view
    @media (max-width: @screen-xs-max) {
        &:not(.not-collapsible) {
            position: static;
            margin-top: 0;
            height: auto;
        }
    }
}


//
// Inside panel
//

// Inside panel body
.panel-body {
    > .heading-elements {
        top: 0;
        margin-top: (@input-height-base - @content-padding-large - 2);
        z-index: 10;
    }

    // Mobile view
    @media (max-width: @screen-xs-max) {
        > .heading-elements-toggle {
            top: @panel-body-padding;
            margin-top: 0;
        }

        > .heading-elements.visible-elements {
            top: ((@panel-body-padding * 2) + @icon-font-size);
            background-color: @panel-bg;
        }
    }
}

// Inside panel footer
.panel-footer {
    > .heading-elements {
        position: static;
        margin-top: 0;
        padding-right: @content-padding-large;

        // Clear floats
        &:after {
            content: '';
            display: table;
            clear: both;
        }
    }

    // Inside bordered panel footer
    &-bordered {
        > .heading-elements:not(.visible-elements) {
            margin-left: -(@content-padding-large);
            padding-right: 0;
        }
    }

    // Mobile view
    @media (max-width: @screen-xs-max) {
        > .heading-elements:not(.not-collapsible) > .pull-right {
            float: none!important;
        }

        // Toggle button
        .heading-elements-toggle {
            position: static;
            padding-top: @content-padding-small;
            padding-bottom: @content-padding-small;
            margin-top: 0;
            display: block;
            text-align: center;
        }
    }
}


//
// Heading thumbnails
//

.heading-thumbnails {
    list-style: none;
    margin: 0;
    padding: 0;
    font-size: 0;

    // Items
    > li {
        position: relative;
        display: inline-block;
        font-size: @font-size-base;

        // Multiple items
        + li {
            margin-left: 10px;
        }

        // Images
        img {
            height: auto;
            max-height: @input-height-base;
            max-width: 100%;
            border-radius: 100px;
        }

        // Labels and badges
        .label,
        .badge {
            position: absolute;
            top: -8px;
            right: -8px;
            border: 2px solid @panel-footer-bg;

            // Inside transparent panel footer
            .panel-default > .panel-heading &,
            .panel-footer-transparent & {
                border-color: @panel-bg;
            }
        }

        // Status mark
        .status-mark {
            position: absolute;
            top: 0;
            right: 0;
            box-shadow: 0 0 0 2px @panel-footer-bg;

            // Add background color if circle
            &[class*=border-] {
                background-color: @panel-footer-bg;

                // Inside transparent panel footer
                .panel-default > .panel-heading &,
                .panel-footer-transparent & {
                    background-color: @panel-bg;
                }
            }

            // Inside transparent panel footer
            .panel-default > .panel-heading &,
            .panel-footer-transparent & {
                background-color: @panel-bg;
            }
        }
    }
}


// Elements
// -------------------------

.heading-elements {

    // Element's horizontal spacing
    .heading-btn + .heading-btn,
    .page-header & .icons-list > li + li,
    .thumbnail-heading & .icons-list > li + li {
        margin-left: (@content-padding-large / 2);
    }

    // Button link inside dark page header
    .page-header-inverse & {
        .btn-link {
            color: #fff;
        }
    }

    // List
    .list-inline {
        margin-bottom: 0;
    }

    // Breadcrumb inside page header
    .breadcrumb {
        padding-top: 0;
        padding-bottom: 0;
    }

    // Align text left in panel tabs/pills
    &.panel-nav {
        .nav > li > a {
            text-align: left;
        }
    }

    // Custom date range display
    .daterange-custom {
        margin-top: ((@input-height-base - 28px) / 2); // half of elements general height - font size
    }

    // Button group
    .heading-btn-group {
        font-size: 0;

        > .btn + .btn:not(.btn-link) {
            margin-left: (@content-padding-large / 2);
        }
    }

    // Hide elements on mobile, but display them
    // when toggle button is clicked
    &.visible-elements {
        text-align: center;

        // Add vertical spacing
        .heading-text,
        .heading-btn,
        .heading-btn-group > .btn,
        .ui-slider,
        .noui-slider,
        .nav-tabs,
        .nav-pills,
        .pagination,
        .progress,
        .icons-list,
        .pager,
        .breadcrumb,
        .daterange-custom,
        .heading-thumbnails,
        .heading-form .form-group,
        > .btn-group {
            margin-top: @line-height-computed;
        }

        // Remove bottom margin from tabs/pills
        .nav-tabs,
        .nav-pills {
            margin-bottom: 0;
        }

        // Heading text
        .heading-text:not(.label):not(.badge) {
            display: block;
        }

        // Make selects full width
        .select2-container,
        .selectboxit-container,
        .selectboxit-options,
        .multiselect + .btn-group,
        div.bootstrap-select {
            width: 100%!important;
        }

        // Static position
        .input-group,
        .input-group-btn,
        .btn-group,
        .dropdown,
        .dropup {
            position: static;
        }

        // Make dropdown menus full width
        .dropdown-menu:not(.multiselect-container) {
            left: -1px;
            right: -1px;
            margin-top: 0;
            .border-top-radius(0);
        }

        // Multiselect container is not full width
        .multiselect-container {
            left: 0;
            right: 0;
        }
    }

    // Make them visible-elements starting from tablet
    // or on mobile if container is not collapsible
    &:not(.visible-elements) {

        // Make them inline
        .heading-text,
        .heading-btn,
        .ui-slider,
        .noui-slider,
        .nav-tabs,
        .nav-pills,
        .pagination,
        .progress,
        .icons-list,
        .breadcrumb,
        .pager,
        .heading-form,
        .daterange-custom,
        .heading-thumbnails,
        > .btn-group {
            float: left;
            margin-left: @content-padding-large;
        }

        // Heading text
        .heading-text {
            display: inline-block;

            & + .heading-text {
                margin-left: @content-padding-large;
            }
        }

        // Elements width
        .selectbox-fixed + .selectboxit-container,
        .selectbox-fixed + .selectboxit-options,
        .progress,
        .ui-slider,
        .noui-slider,
        .input-group,
        .selectboxit-container .selectboxit-options,
        .heading-form .form-control {
            width: 220px;
        }


        // Elements sizes spacing
        // ------------------------------

        // Small elements corrections
        .select-sm,
        .input-sm,
        .input-group-sm,
        .uploader-sm,
        .pagination-sm,
        .pager-sm,
        .selectbox-sm + .selectboxit-container,
        .btn-sm,
        .btn-group-sm > .btn {
            margin-top: (@input-height-base - @input-height-small) / 2;
        }

        // Mini elements corrections
        .select-xs,
        .input-xs,
        .input-group-xs,
        .uploader-xs,
        .pagination-xs,
        .pager-xs,
        .selectbox-xs + .selectboxit-container,
        .btn-xs,
        .btn-group-xs > .btn {
            margin-top: (@input-height-base - @input-height-mini) / 2;
        }

        // Floating buttons
        .btn-float {
            margin-top: (((@input-height-base - ((@btn-float-padding * 2) + @icon-font-size)) / 2)); // Difference between base height and button height

            // If has text
            &.has-text {
                margin-top: (((@input-height-base - ((@btn-float-padding * 2) + @icon-font-size + @line-height-computed + 5)) / 2)); // Difference between base height and button height with text
            }

            // If float link
            &.btn-link {
                margin-top: (((@input-height-base - (@icon-font-size + @line-height-computed + (@btn-float-padding * 2) - 6)) / 2));
            }
        }

        // Sliders
        .ui-slider,
        .noui-slider {
            margin-top: ((@input-height-base - @slider-base-size) / 2);

            &-lg {
                margin-top: ((@input-height-base - @slider-large-size) / 2);
            }

            &-sm {
                margin-top: ((@input-height-base - @slider-small-size) / 2);
            }

            &-xs {
                margin-top: ((@input-height-base - @slider-mini-size) / 2);
            }
        }

        // Progress bars
        .progress {
            margin-top: ((@input-height-base - @progress-base-height) / 2);

            // Large
            &-lg {
                margin-top: ((@input-height-base - @progress-large-height) / 2);
            }

            // Small
            &-sm {
                margin-top: ((@input-height-base - @progress-small-height) / 2);
            }

            // Mini
            &-xs {
                margin-top: ((@input-height-base - @progress-mini-height) / 2);
            }

            // Tiny
            &-xxs {
                margin-top: ((@input-height-base - @progress-tiny-height) / 2);
            }

            // Micro
            &-micro {
                margin-top: ((@input-height-base - @progress-micro-height) / 2);
            }
        }

        // Icons list
        .icons-list {
            margin-top: ((@input-height-base - @icon-font-size) / 2);
        }

        // Text
        .heading-text {
            margin-top: ((@input-height-base - @line-height-computed) / 2);
        }

        // Panel navs
        &.panel-nav {

            // Navs
            > .nav {
                margin-bottom: 0;
            }

            // Desktop view
            @media (min-width: @screen-sm-min) {

                // Navs
                > .nav {
                    margin-top: ((@input-height-base - (((@padding-base-vertical + 2) * 2) + @line-height-computed)) / 2);
                }

                // Tabs
                > .nav-tabs {
                    border-bottom-width: 0;

                    // Remove active state highlight
                    &.nav-tabs-bottom > li.active > a:after {
                        background-color: transparent;
                    }
                }

                // Small pills
                > .nav-sm {
                    margin-top: ((@input-height-base - ((@padding-small-vertical * 2) + @line-height-computed)) / 2);
                }

                // Mini pills
                > .nav-xs {
                    margin-top: ((@input-height-base - (((@padding-xs-vertical - 2) * 2) + @line-height-computed)) / 2);
                }
            }

            // Mobile view
            @media (max-width: @screen-xs-max) {
                position: static;
                height: auto;

                // Navs
                > .nav {
                    float: none;
                }

                // Inside panel heading
                .panel-heading & {
                    margin-top: @content-padding-base;

                    // Inside flat panel
                    .panel-flat & {
                        margin-top: @content-padding-large;
                    }

                    // Navs
                    > .nav {
                        margin-left: 0;
                    }
                }

                // Add vertical margin if container is not collapsible
                .panel-footer &.not-collapsible {
                    > .nav {
                        margin-top: @line-height-computed - @padding-base-vertical;
                        margin-bottom: @line-height-computed - @padding-base-vertical;
                    }
                }
            }
        }
    }
}


// Heading form
// -------------------------

.heading-form {

    // Form group
    .form-group {
        margin-bottom: 0;
    }

    // Switchery
    .checkbox-switchery {
        &,
        &[class*="switchery-"] {
            margin-bottom: 0;
        }
    }

    // If container is not collapsible
    .heading-elements:not(.visible-elements) & {

        // Radios and checkboxes
        .checkbox-inline,
        .radio-inline {
            margin-top: ((@input-height-base - @line-height-computed) / 2);
        }

        // Checkbox switch
        .checkbox-switch {

            // Those 2 pixels that are used in Switch styles as negative top margin. In fact, switch height is equal to heading elements container height.
            // They will be added below to calculate the difference
            margin-top: 2px;

            // Small
            &-sm {
                margin-top: ((@input-height-base - @input-height-small) / 2) + 2;
            }

            // Mini
            &-xs {
                margin-top: ((@input-height-base - @input-height-mini) / 2) + 2;
            }
        }

        // Input group
        .input-group {
            max-width: 220px;

            // Inputs
            .form-control {
                width: 100%;
                margin-top: 0;
            }

            // Buttons
            &.input-group-sm .btn,
            &.input-group-xs .btn {
                margin-top: 0;
            }
        }
    }


    // Setup desktop view
    @media (min-width: @screen-sm-min) {

        // Form group
        .form-group {
            float: left;

            // Multiple groups
            & + .form-group {
                margin-left: @content-padding-base;
            }
        }
    }
}


// Toggle elements visibility
// ------------------------------

@media (max-width: @screen-xs-max) {

    // Heading elements
    .heading-elements,
    .breadcrumb-elements {

        // If collapsible        
        &:not(.not-collapsible) {
            display: none;
        }

        // Show on click
        &.visible-elements {
            display: block;
        }
    }

    // Visible elements parent container
    .has-visible-elements {

        // All panels
        .panel & {
            padding-bottom: 0;
        }

        // Flat panel
        .panel-flat .panel-heading& {
            padding-bottom: @content-padding-large;
        }
    }

    // Visible elements container
    .visible-elements {

        // Inside panels
        .panel & {
            border-top: 1px solid @panel-default-border;
            padding: @content-padding-large;
            padding-top: 0;
        }

        // Inside panel heading
        .panel-heading & {
            margin: @content-padding-base -(@content-padding-large) 0 -(@content-padding-large);
            background-color: darken(@panel-bg, 1%);

            // In flat panel
            .panel-flat & {
                margin-top: @content-padding-large;
                border-bottom: 1px solid @panel-default-border;
            }
        }

        // Inside panel footer
        .panel-footer & {
            margin-top: @padding-base-vertical;
            .border-bottom-radius(@border-radius-base);
        }

        // Inside condensed panel footer
        .panel-footer-condensed & {
            margin-top: 2px;
        }

        // Inside transparent panel footer
        .panel-footer-transparent & {
            margin-top: @content-padding-large - ((@input-height-base - @line-height-computed) / 2);
            background-color: @panel-bg;
        }

        // Inside colored panels
        .panel[class*=bg-] &,
        .panel-heading[class*=bg-] &,
        .panel-primary &,
        .panel-danger &,
        .panel-success &,
        .panel-warning &,
        .panel-info & {
            border-color: fade(#fff, 20%);
            left: 0;
            right: 0;
            background-color: fade(#000, 10%);
        }

        // Breadcrumb elements
        &.breadcrumb-elements {
            &.not-collapsible {
                display: none;
            }
        }

        // Inside page header
        .page-header-content > & {
            background-color: @body-bg;
            left: 0;
            right: 0;
            border-top: 1px solid darken(@body-bg, 5%);
            z-index: (@zindex-navbar + 2);
            padding-bottom: @line-height-computed;
            margin-left: -(@grid-gutter-width);
            margin-right: -(@grid-gutter-width);
            padding-left: @grid-gutter-width;
            padding-right: @grid-gutter-width;

            // Inside default page header
            .page-header-default & {
                background-color: darken(@page-header-default-bg, 1%);
                border-color: @panel-default-border;
            }

            // Inside inverse page header
            .page-header-inverse & {
                background-color: fade(#000, 10%);
                border-color: fade(#fff, 10%);
            }
        }
    }
}
