
@use "sass:map";
@use "../core/_index.scss" as *;
@use "./_variables.scss" as *;

@mixin kendo-tabstrip--layout() {

    // Tabstrip wrapper
    .k-tabstrip-wrapper {
        padding-inline: var( --kendo-tabstrip-wrapper-padding-x, #{ $kendo-tabstrip-wrapper-padding-x} );
        padding-block: var( --kendo-tabstrip-wrapper-padding-y, #{ $kendo-tabstrip-wrapper-padding-y} );
        box-sizing: border-box;
        border-width: 0;
        border-style: solid;
        display: flex;
        flex-direction: column;
        position: relative;
    }


    // Tabstrip
    .k-tabstrip {
        border-width: 0;
        border-color: transparent;
        box-sizing: border-box;
        outline: 0;
        font-family: var( --kendo-tabstrip-font-family, #{$kendo-tabstrip-font-family} );
        font-size: var( --kendo-tabstrip-font-size, #{$kendo-tabstrip-font-size} );
        line-height: var( --kendo-tabstrip-line-height, #{$kendo-tabstrip-line-height} );
        color: inherit;
        background-color: transparent;
        display: flex;
        flex-flow: column nowrap;
        -webkit-touch-callout: none;
        -webkit-tap-highlight-color: $kendo-color-rgba-transparent;
    }
    .k-tabstrip-wrapper > .k-tabstrip {
        flex: 1 1 auto;
    }


    // Tabstrip items wrapper
    .k-tabstrip-items-wrapper {
        box-sizing: border-box;
        border-width: 0;
        border-style: solid;
        border-color: inherit;
        position: relative;
        flex-shrink: 0;
    }


    // Tabstrip items
    .k-tabstrip-items {
        box-sizing: border-box;
        outline: 0;
        display: flex;
        flex-flow: row wrap;
        flex: 1 1 auto;
        gap: $kendo-tabstrip-item-gap;

        *,
        *::before,
        *::after {
            box-sizing: border-box;
        }

        .k-item {
            margin: 0;
            padding: 0;
            border: 0;
            position: relative;
            flex-shrink: 0;
            display: flex;
            flex-direction: row;
            align-items: stretch;
            justify-items: stretch;
            outline: 0;

            // Active state
            &:active,
            &.k-active,
            &.k-selected {
                font-weight: var( --kendo-tabstrip-item-selected-font-weight, #{$kendo-tabstrip-item-selected-font-weight} );
            }
        }

        .k-item-actions {
            margin: 0;
            padding: 0;
            display: flex;
            flex-direction: row;
        }

        .k-link {
            padding-inline: var( --kendo-tabstrip-item-padding-x, #{$kendo-tabstrip-item-padding-x} );
            padding-block: var( --kendo-tabstrip-item-padding-y, #{$kendo-tabstrip-item-padding-y} );
            color: inherit;
            cursor: pointer;
            display: inline-flex;
            vertical-align: middle;
            flex: 1 1 auto;
            flex-direction: row;
            align-content: center;
            align-items: center;
        }


        // Disabled state
        .k-item.k-disabled,
        .k-item[disabled] {
            opacity: $kendo-tabstrip-item-disabled-opacity;
            filter: $kendo-tabstrip-item-disabled-filter;
        }
    }


    // Tabstrip content
    .k-tabstrip-content,
    .k-tabstrip > .k-content {
        margin: 0 !important; // stylelint-disable-line declaration-no-important
        padding-inline: var( --kendo-tabstrip-content-padding-x, #{$kendo-tabstrip-content-padding-x} );
        padding-block: var( --kendo-tabstrip-content-padding-y, #{$kendo-tabstrip-content-padding-y} );
        box-sizing: border-box;
        border-width: 0;
        border-style: solid;
        border-color: inherit;
        display: none;
        overflow: auto;
        flex: 1 1 auto;
        position: relative;

        &:active,
        &.k-active {
            display: block;
        }
    }


    // Loading indicator
    .k-tabstrip-items .k-loading {
        width: 20%;
        height: 0;
        border: 0;
        border-top: 1px solid transparent;
        border-color: inherit;
        background: none;
        position: absolute;
        top: 0;
        left: 0;
        transition: width .2s linear;

        // TODO: a better name
        display: none;

        &.k-complete {
            width: 100%;
            border-top-width: 0;
        }
    }


    // Scrolling
    .k-tabstrip-scrollable {
        > .k-tabstrip-items-wrapper {
            > .k-tabstrip-items {
                flex-wrap: nowrap;
                white-space: nowrap;
                overflow: hidden;

                &.k-tabstrip-items-scroll {
                    scrollbar-width: none;

                    &::-webkit-scrollbar {
                        display: none;
                    }
                }
            }

            &.k-tabstrip-top,
            &.k-tabstrip-bottom {
                .k-tabstrip-items.k-tabstrip-items-scroll {
                    overflow-x: auto;
                }
            }

            &.k-tabstrip-left,
            &.k-tabstrip-right {
                .k-tabstrip-items.k-tabstrip-items-scroll {
                    overflow-y: auto;
                }
            }
        }
    }

    .k-tabstrip-scrollable-overlay {
        .k-tabstrip-items-wrapper {
            &::before,
            &::after {
                content: '';
                position: absolute;
                z-index: 3;
            }
        }

        &.k-tabstrip-top,
        &.k-tabstrip-bottom {
            .k-tabstrip-items-wrapper {
                &::before,
                &::after {
                    height: 100%;
                    aspect-ratio: 1;
                }
                &::before {
                    inset-inline-start: 0;
                }

                &::after {
                    inset-inline-end: 0;
                }
            }
        }

        &.k-tabstrip-left,
        &.k-tabstrip-right {
            .k-tabstrip-items-wrapper {
                &::before,
                &::after {
                    width: 100%;
                }
                &::before {
                    inset-block-start: 0;
                }

                &::after {
                    inset-block-end: 0;
                }
            }
        }

        &.k-tabstrip-scrollable-start {
            .k-tabstrip-items-wrapper {
                &::before {
                    display: none;
                }
            }
        }

        &.k-tabstrip-scrollable-end {
            .k-tabstrip-items-wrapper {
                &::after {
                    display: none;
                }
            }
        }
    }

    // Tabstrip orientation
    .k-tabstrip-horizontal {
        flex-direction: row;
    }
    .k-tabstrip-vertical {
        flex-direction: column;
    }


    // Tabstrip position
    .k-tabstrip-top {
        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-horizontal !optional;
            border-bottom-width: var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} );

            .k-item {
                margin-block-end: calc( var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} ) * -1 );

                .k-link {
                    justify-content: center;
                }
            }

        }
    }
    .k-tabstrip-bottom {
        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-horizontal !optional;
            border-top-width: var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} );

            .k-item {
                margin-block-start: calc( var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} ) * -1 );

                .k-link {
                    justify-content: center;
                }
            }
        }
    }
    .k-tabstrip-left {
        flex-direction: row;

        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-vertical !optional;
            border-right-width: var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} );

            > .k-tabstrip-items {
                flex-direction: column;
            }

            .k-item {
                margin-inline-end: calc( var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} ) * -1 );
            }
        }

    }
    .k-tabstrip-right {
        flex-direction: row-reverse;

        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-vertical !optional;
            border-left-width: var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} );

            > .k-tabstrip-items {
                flex-direction: column;
            }

            .k-item {
                margin-inline-start: calc( var( --kendo-tabstrip-border-width, #{$kendo-tabstrip-border-width} ) * -1 );
            }
        }
    }


    // Tabstrip align
    .k-tabstrip-items-start {
        justify-content: flex-start;
    }
    .k-tabstrip-items-center {
        justify-content: center;
    }
    .k-tabstrip-items-end {
        justify-content: flex-end;
    }
    .k-tabstrip-items-justify {
        justify-content: space-between;
    }
    .k-tabstrip-items-stretched > * {
        flex: 1 0 0;
    }

    // Selected indicator
    @if ($kendo-tabstrip-indicator-size) {

        .k-tabstrip-items-wrapper {

            .k-item::after {
                content: "";
                border-width: 0;
                border-style: solid;
                display: block;
                position: absolute;
                z-index: 2;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                opacity: 0;
                transform: scaleY(0);
                pointer-events: none;
                transition: opacity .3s, transform .3s;
            }
            .k-item:active::after,
            .k-item.k-active::after,
            .k-item.k-selected::after {
                opacity: 1;
                transform: scaleY(1);
            }

            .k-item > .k-link {
                z-index: 1;
            }
        }


        // Variants
        .k-tabstrip-top > .k-tabstrip-items-wrapper .k-item::after {
            border-bottom-width: var( --kendo-tabstrip-indicator-size, #{$kendo-tabstrip-indicator-size} );
        }
        .k-tabstrip-bottom > .k-tabstrip-items-wrapper .k-item::after {
            border-top-width: var( --kendo-tabstrip-indicator-size, #{$kendo-tabstrip-indicator-size} );
        }
        .k-tabstrip-left > .k-tabstrip-items-wrapper .k-item::after {
            border-right-width: var( --kendo-tabstrip-indicator-size, #{$kendo-tabstrip-indicator-size} );
        }
        .k-tabstrip-right > .k-tabstrip-items-wrapper .k-item::after {
            border-left-width: var( --kendo-tabstrip-indicator-size, #{$kendo-tabstrip-indicator-size} );
        }


        // Hide tabstrip indicator when dragging
        .k-tabstrip-items-wrapper .k-item.k-tabstrip-dragging {
            &::after {
                display: none !important; // stylelint-disable-line declaration-no-important
            }
        }

    }


    // RTL
    .k-rtl .k-tabstrip,
    .k-tabstrip[dir="rtl"] {

        &.k-tabstrip-left,
        &.k-tabstrip-right {
            > .k-tabstrip-items-wrapper {
                order: 1;
            }

            > .k-content { order: 0; }
            > .k-tabstrip-content { order: 0; }
        }

    }

     // TabStrip sizes
     @each $size, $size-props in $kendo-tabstrip-sizes {
        $_font-size: map.get( $size-props, font-size );
        $_line-height: map.get( $size-props, line-height );
        $_item-padding-x: map.get( $size-props, item-padding-x );
        $_item-padding-y: map.get( $size-props, item-padding-y );

        .k-tabstrip-#{$size} {
            .k-tabstrip-items .k-link {
                font-size: $_font-size;
                line-height: $_line-height;
                padding-block: $_item-padding-y;
                padding-inline: $_item-padding-x;
            }

            :is(&.k-tabstrip-left, &.k-tabstrip-right):is(.k-tabstrip-scrollable-overlay) :is(.k-tabstrip-items-wrapper){
                &::before,
                &::after {
                    height: calc( ($_line-height * 1em) + ($kendo-tabstrip-border-width * 2) + ($_item-padding-y * 2) );
                }
            }
        }
    }

}
