@use "sass:map";
@use "../../color-system/_constants.scss" as *;
@use "../../mixins/index.scss" as *;
@use "../../functions/index.scss" as *;
@use "../icons/_variables.scss" as *;
@use "./_variables.scss" as *;
@use "../../z-index/index.scss" as *;
@use "../../motion/index.scss" as *;
@use "../../spacing/index.scss" as *;
@use "../../typography/index.scss" as *;

@mixin kendo-tabstrip--layout-base() {

    // Tabstrip wrapper
    .k-tabstrip-wrapper {
        padding-block: $kendo-tabstrip-wrapper-padding-y;
        padding-inline: $kendo-tabstrip-wrapper-padding-x;
        box-sizing: border-box;
        border-width: $kendo-tabstrip-wrapper-border-width;
        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: $kendo-tabstrip-font-family;
        font-size: $kendo-tabstrip-font-size;
        line-height: $kendo-tabstrip-line-height;
        color: inherit;
        background-color: transparent;
        display: flex;
        flex-flow: column nowrap;
        position: relative;
        -webkit-touch-callout: none;
        -webkit-tap-highlight-color: $kendo-color-rgba-transparent;

        // 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-when-default($kendo-tabstrip-default-size, $size)}
            &.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) );
                    }
                }
            }
        }
    }

    .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-direction: inherit;
        flex-wrap: wrap;
        flex: 1 1 auto;
        gap: $kendo-tabstrip-item-gap;

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

        .k-tabstrip-item,
        .k-item {
            margin: 0;
            padding-block: 0;
            padding-inline: $kendo-tabstrip-item-spacing-x;
            border: $kendo-tabstrip-item-border-width solid transparent;
            position: relative;
            flex-shrink: 0;
            display: flex;
            flex-direction: row;
            align-items: stretch;
            justify-items: stretch;
            outline: 0;
            transition: color k-transition(emphasis), border-color k-transition(emphasis), box-shadow k-transition(emphasis), background-color k-transition(emphasis), font-weight k-transition(emphasis);

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

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

        .k-link {
            padding-block: $kendo-tabstrip-md-item-padding-y;
            padding-inline: $kendo-tabstrip-md-item-padding-x;
            color: inherit;
            cursor: pointer;
            display: inline-flex;
            vertical-align: middle;
            flex: 1 1 auto;
            flex-direction: row;
            align-content: center;
            align-items: center;
            gap: $kendo-icon-spacing;
        }


        // Disabled state
        .k-tabstrip-item.k-disabled,
        .k-tabstrip-item[disabled],
        .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-block: $kendo-tabstrip-content-padding-y;
        padding-inline: $kendo-tabstrip-content-padding-x;
        box-sizing: border-box;
        border-width: $kendo-tabstrip-content-border-width;
        border-style: solid;
        border-color: inherit;
        display: none;
        overflow: auto;
        flex: 1 1 auto;
        position: relative;

        &.k-active {
            display: block;
        }

        &:focus,
        &.k-focus {
            outline-width: 1px;
            outline-style: dotted;
            outline-offset: -1px;
        }
    }


    // Loading indicator
    .k-tabstrip-items .k-loading {
        width: 20%;
        height: 0;
        border: 0;
        border-block-start: 1px solid transparent;
        border-color: inherit;
        background: none;
        position: absolute;
        inset-block-start: 0;
        inset-inline-start: 0;
        transition: width k-duration(rapid) k-easing(linear);

        // TODO: a better name
        display: none;

        &.k-complete {
            width: 100%;
            border-block-start-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-prev,
            > .k-tabstrip-next {
                margin: $kendo-tabstrip-scroll-button-spacing;
            }
        }

        &.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;
            }
        }

        // Scrollable with buttons (not overlay) - use pseudo-element for border
        // so tabs can paint over it (overflow:hidden clips negative margin)
        &:not(.k-tabstrip-scrollable-overlay) {
            > .k-tabstrip-items-wrapper {
                &::after {
                    content: "";
                    position: absolute;
                    z-index: k-z-index("base");
                    border-width: 0;
                    border-style: solid;
                    border-color: inherit;
                }
            }

            // Top position
            &.k-tabstrip-top > .k-tabstrip-items-wrapper {
                border-block-end-width: 0;

                &::after {
                    inset-inline-start: 0;
                    inset-inline-end: 0;
                    inset-block-end: 0;
                    border-block-end-width: $kendo-tabstrip-border-width;
                }

                .k-tabstrip-item,
                .k-item {
                    z-index: k-z-index("base", 1);
                }
            }

            // Bottom position
            &.k-tabstrip-bottom > .k-tabstrip-items-wrapper {
                border-block-start-width: 0;

                &::after {
                    inset-inline-start: 0;
                    inset-inline-end: 0;
                    inset-block-start: 0;
                    border-block-start-width: $kendo-tabstrip-border-width;
                }

                .k-tabstrip-item,
                .k-item {
                    z-index: k-z-index("base", 1);
                }
            }

            // Left position
            &.k-tabstrip-left > .k-tabstrip-items-wrapper {
                border-right-width: 0;

                &::after {
                    inset-block-start: 0;
                    inset-block-end: 0;
                    right: 0;
                    border-right-width: $kendo-tabstrip-border-width;
                }

                .k-tabstrip-item,
                .k-item {
                    z-index: k-z-index("base", 1);
                }
            }

            // Right position
            &.k-tabstrip-right > .k-tabstrip-items-wrapper {
                border-left-width: 0;

                &::after {
                    inset-block-start: 0;
                    inset-block-end: 0;
                    left: 0;
                    border-left-width: $kendo-tabstrip-border-width;
                }

                .k-tabstrip-item,
                .k-item {
                    z-index: k-z-index("base", 1);
                }
            }
        }

        // Scrollable overlay - use pseudo-element on items for border
        // (items-wrapper pseudo-elements are used for gradient overlays)
        &.k-tabstrip-scrollable-overlay {
            > .k-tabstrip-items-wrapper {
                border-width: 0;

                > .k-tabstrip-items {
                    position: relative;
                    border-color: inherit;

                    &::after {
                        content: "";
                        position: absolute;
                        z-index: k-z-index("base");
                        border-width: 0;
                        border-style: solid;
                        border-color: inherit;
                    }
                }

                .k-tabstrip-item,
                .k-item {
                    z-index: k-z-index("base", 1);
                }
            }

            // Top position
            &.k-tabstrip-top > .k-tabstrip-items-wrapper > .k-tabstrip-items::after {
                inset-inline-start: 0;
                inset-inline-end: 0;
                inset-block-end: 0;
                border-block-end-width: $kendo-tabstrip-border-width;
            }

            // Bottom position
            &.k-tabstrip-bottom > .k-tabstrip-items-wrapper > .k-tabstrip-items::after {
                inset-inline-start: 0;
                inset-inline-end: 0;
                inset-block-start: 0;
                border-block-start-width: $kendo-tabstrip-border-width;
            }

            // Left position
            &.k-tabstrip-left > .k-tabstrip-items-wrapper > .k-tabstrip-items::after {
                inset-block-start: 0;
                inset-block-end: 0;
                right: 0;
                border-right-width: $kendo-tabstrip-border-width;
            }

            // Right position
            &.k-tabstrip-right > .k-tabstrip-items-wrapper > .k-tabstrip-items::after {
                inset-block-start: 0;
                inset-block-end: 0;
                left: 0;
                border-left-width: $kendo-tabstrip-border-width;
            }
        }
    }

    .k-tabstrip-scrollable-overlay {
        .k-tabstrip-items-wrapper {
            &::before,
            &::after {
                content: '';
                position: absolute;
                z-index: k-z-index("base", 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;
                }
            }
        }
    }


    // Overflow
    .k-tabstrip-overflow {
        > .k-tabstrip-items-wrapper {
            > .k-tabstrip-items {
                flex-wrap: nowrap;
                white-space: nowrap;
            }
        }

        .k-tabstrip-overflow-button {
            flex-shrink: 0;
        }
    }


    // Actions container
    .k-tabstrip-actions {
        flex-shrink: 0;
        gap: k-spacing(0.5);
        align-items: center;

        > .k-separator-vertical {
            height: $kendo-line-height-em;
            align-self: center;
        }
    }


    // 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-block-end-width: $kendo-tabstrip-border-width;

            .k-tabstrip-item,
            .k-item {
                @include border-top-radius( $kendo-tabstrip-item-border-radius );
                margin-block-end: if( $kendo-tabstrip-border-width, calc( -1 * $kendo-tabstrip-border-width ), null );
                border-block-end-width: $kendo-tabstrip-border-width;
                border-block-end-color: transparent;

                .k-link {
                    justify-content: center;
                }
            }
            .k-tabstrip-item:active,
            .k-tabstrip-item.k-active,
            .k-item:active,
            .k-item.k-active {
                border-block-end-color: transparent !important; // stylelint-disable-line declaration-no-important
            }
        }

        > .k-content,
        > .k-tabstrip-content {
            @include border-bottom-radius( $kendo-tabstrip-item-border-radius );
            border-block-start-width: 0 !important; // stylelint-disable-line declaration-no-important
        }
    }
    .k-tabstrip-bottom {
        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-horizontal !optional;
            border-block-start-width: $kendo-tabstrip-border-width;

            .k-tabstrip-item,
            .k-item {
                @include border-bottom-radius( $kendo-tabstrip-item-border-radius );
                margin-block-start: if( $kendo-tabstrip-border-width, calc( -1 * $kendo-tabstrip-border-width ), null );
                border-block-start-width: $kendo-tabstrip-border-width;
                border-block-start-color: transparent;

                .k-link {
                    justify-content: center;
                }
            }
            .k-tabstrip-item:active,
            .k-tabstrip-item.k-active,
            .k-item:active,
            .k-item.k-active {
                border-block-start-color: transparent !important; // stylelint-disable-line declaration-no-important
            }
        }

        > .k-content,
        > .k-tabstrip-content {
            @include border-top-radius( $kendo-tabstrip-item-border-radius );
            border-block-end-width: 0 !important; // stylelint-disable-line declaration-no-important
        }
    }
    .k-tabstrip-left {
        flex-direction: row;

        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-vertical !optional;
            border-right-width: $kendo-tabstrip-border-width;

            .k-tabstrip-item,
            .k-item {
                border-radius: $kendo-tabstrip-item-border-radius 0 0 $kendo-tabstrip-item-border-radius;
                margin-right: if( $kendo-tabstrip-border-width, calc( -1 * $kendo-tabstrip-border-width ), null );
                border-right-width: $kendo-tabstrip-border-width;
                border-right-color: transparent;
            }
            .k-tabstrip-item:active,
            .k-tabstrip-item.k-active,
            .k-item:active,
            .k-item.k-active {
                border-right-color: transparent !important; // stylelint-disable-line declaration-no-important
            }
        }

        > .k-content,
        > .k-tabstrip-content {
            border-radius: 0 $kendo-tabstrip-item-border-radius $kendo-tabstrip-item-border-radius 0;
            border-left-width: 0 !important; // stylelint-disable-line declaration-no-important
        }

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

        > .k-tabstrip-items-wrapper {
            @extend .k-tabstrip-vertical !optional;
            border-left-width: $kendo-tabstrip-border-width;

            .k-tabstrip-item,
            .k-item {
                border-radius: 0 $kendo-tabstrip-item-border-radius $kendo-tabstrip-item-border-radius 0;
                margin-left: if( $kendo-tabstrip-border-width, calc( -1 * $kendo-tabstrip-border-width ), null );
                border-left-width: $kendo-tabstrip-border-width;
                border-left-color: transparent;
            }

            .k-tabstrip-item:active,
            .k-tabstrip-item.k-active,
            .k-item:active,
            .k-item.k-active {
                border-left-color: transparent !important; // stylelint-disable-line declaration-no-important
            }
        }

        > .k-content,
        > .k-tabstrip-content {
            border-radius: $kendo-tabstrip-item-border-radius 0 0 $kendo-tabstrip-item-border-radius;
            border-right-width: 0;
        }
    }


    // 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-tabstrip-item::after,
            .k-item::after {
                content: "";
                border-width: 0;
                border-style: solid;
                display: none;
                position: absolute;
                z-index: k-z-index("base", 2);
                inset-block-start: 0;
                inset-inline-end: 0;
                inset-block-end: 0;
                inset-inline-start: 0;
                pointer-events: none;
            }
            .k-tabstrip-item.k-active::after,
            .k-item.k-active::after {
                display: block;
            }

            .k-tabstrip-item > .k-link,
            .k-item > .k-link {
                z-index: k-z-index("base", 1);
            }
        }


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


    // RTL
    .k-rtl .k-tabstrip,
    [dir="rtl"] .k-tabstrip,
    .k-tabstrip.k-rtl,
    .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; }
        }

    }


}
