@use "sass:map";
@use "sass:math";
@use "../core/_index.scss" as *;
@use "../core/functions/index.scss" as *;
@use "../button/_variables.scss" as *;
@use "../chip/_variables.scss" as *;
@use "../forms/_variables.scss" as *;
@use "../table/_variables.scss" as *;
@use "../tabstrip/_variables.scss" as *;
@use "./_variables.scss" as *;
@use "../core/spacing/_index.scss" as *;
@use "@progress/kendo-theme-core/scss/components/grid/_layout.scss" as *;

@mixin kendo-grid--layout() {

    @include kendo-grid--layout-base();

    .k-grid {
        border-style: $kendo-grid-border-style;

        .k-table-th {
            border-block-end-width: $kendo-grid-header-border-width-y;
            border-inline-start-width: $kendo-grid-header-border-width-x;
        }

        td,
        .k-table-td {
            border-block-end-width: $kendo-grid-cell-border-width-y;
            border-inline-start-width: $kendo-grid-cell-border-width-x;
        }

        // Grouping, hierarchy
        .k-grouping-row td,
        .k-grouping-row .k-table-td {
            border-block-end-width: 0;
        }

        .k-grouping-row + .k-table-row td,
        .k-grouping-row + .k-table-row .k-table-td {
            border-block-start-width: $kendo-grid-grouping-row-border-width-y;
        }

        .k-grouping-row .k-group-cell,
        .k-grouping-row + .k-table-row .k-group-cell {
            border-block-width: 0;
            border-inline-end-width: 1px;
        }

        .k-group-footer td,
        .k-group-footer .k-table-td {
            border-inline-width: $kendo-grid-group-footer-border-width-x;
            border-block-end-width: $kendo-grid-group-footer-border-width-y;
        }

        .k-table .k-group-footer td,
        .k-table .k-group-footer .k-table-td {
            border-block-start-width: 0;
        }

        .k-grid-header .k-cell-inner > .k-link > .k-sort-icon .k-icon {
            display: inline-flex;
        }

        // Grid Sizes
        @each $size, $size-props in $kendo-grid-sizes {
            $_cell-padding-y: map.get( $size-props, cell-padding-y );

            // Resizing wrapper
            #{k-when-default($kendo-grid-default-size, $size)}
            &.k-grid-#{$size} {
                .k-resizer-wrap {
                    padding-block-start: calc( #{$_cell-padding-y} - #{$kendo-grid-row-resizer-height} );
                    padding-block-end: $_cell-padding-y;
                }
            }
        }
    }

    .k-grouping-dropclue {
        width: calc( #{$kendo-grid-group-drop-hint-size} * 2 );
        height: $kendo-grid-group-drop-hint-height;

        &::before {
            border-width: 0;
            width: $kendo-grid-group-drop-hint-dot-size;
            height: $kendo-grid-group-drop-hint-dot-size;
            border-radius: 50%;
            inset-inline-start: k-spacing(0.5);
        }

        &::after {
            inset-inline-start:calc( #{$kendo-grid-group-drop-hint-size} - #{$kendo-grid-group-drop-hint-line-size} / 2 - k-spacing(0.5) );
        }
    }

    // Grid header / footer
    .k-grid-header-wrap,
    .k-grid-footer-wrap,
    .k-grid-pinned-wrap {
        margin-inline-end: calc( #{$kendo-grid-border-width} * -1 );
        border-inline-start-width: 0;
        border-inline-end-width: $kendo-grid-cell-border-width-y;
        border-block-width: 0;

        .k-table-row:not(:only-child) .k-table-th,
        .k-table-row:not(:only-child) .k-table-td:nth-child(n+2) {
            border-inline-start-width: 1px;
        }
    }

    .k-grid-header {
        border-block-end-width: $kendo-grid-header-border-width-y;

        .k-table  {
            margin-block-end: calc( #{$kendo-grid-header-border-width-y} * -1 );
        }

        .k-table-th {
            &.k-first {
                border-inline-start-width: $kendo-grid-header-first-border-width;
            }
        }

        .k-table-row .k-table-th:first-child:not(.k-first) {
            border-inline-start-width: 0;
        }

        .k-grid-filter,
        .k-header-column-menu,
        .k-grid-header-menu {
            inset-inline-end: $kendo-grid-header-menu-spacing;
            inset-block-end: calc( #{$kendo-grid-header-padding-y} + ( #{$kendo-line-height-em} / 2 ) - ( #{$kendo-button-inner-calc-size} / 2 ) );
        }

        .k-cell-inner > .k-link > .k-icon,
        .k-cell-inner > .k-link > .k-sort-icon {
            margin-inline-start: $kendo-grid-sort-icon-spacing;
        }

        .k-sort-order {
            height: var( --kendo-icon-size, 1rem );
            font-size: $kendo-grid-sort-index-font-size;
            margin-inline-start: $kendo-grid-sort-index-spacing-x;
        }
    }

    .k-grid-footer {

        td,
        .k-table-td {
            border-block-end-width: 0;
        }
    }

    .k-grid-footer td,
    .k-grid-footer .k-table-td,
    .k-grid-header .k-table-th,
    .k-group-footer td,
    .k-grouping-row td,
    .k-group-footer .k-table-td,
    .k-grouping-row .k-table-td {
        font-weight: $kendo-grid-header-font-weight;
    }

    // Filter row
    .k-filter-row {
        td,
        .k-table-td,
        .k-table-th {
            padding-inline: $kendo-grid-filter-cell-padding-x;
            padding-block: $kendo-grid-filter-cell-padding-y;
        }

        td:first-child,
        .k-table-td:first-child {
            border-inline-start-width: 0;
        }
    }

    // Master row
    .k-master-row .k-group-cell {
        border-block-width: 0;
        border-inline-end-width: $kendo-grid-border-width;
    }

    .k-master-row.k-expanded td,
    .k-master-row.k-expanded .k-table-td {
        border-block-end-width: 0;
    }

    .k-master-row:has(.k-hierarchy-cell[aria-expanded="true"]) td,
    .k-master-row:has(.k-hierarchy-cell[aria-expanded="true"]) .k-table-td {
        border-block-end-width: 0;
    }

    .k-master-row:last-child td,
    .k-master-row:last-child .k-table-td {
        border-block-end-width: $kendo-grid-border-width;
    }

    // Selection Aggregates

    .k-grid-content-locked,
    .k-grid-footer-locked,
    .k-grid-header-locked {
        border-block-width: 0;
        border-inline-start-width: 0;
        border-inline-end-width: 1px;

        td,
        .k-table-td,
        .k-table-th {
            border-inline-start-width: 1px;
        }

        .k-grouping-row .k-group-cell,
        .k-grouping-row + .k-table-row .k-group-cell,
        .k-table-row .k-group-cell {
            border-inline-end-width: 0;
        }

        .k-table-row:not(.k-group-footer) .k-group-cell {
            border-block-end-width: 0;
        }
    }

    .k-grid .k-table .k-grid-header-sticky,
    .k-grid .k-table .k-grid-content-sticky,
    .k-grid .k-table .k-grid-footer-sticky {
        border-inline-end-width: $kendo-grid-sticky-cell-border-width;
    }

    .k-grid-header-sticky.k-table-th.k-grid-no-left-border.k-first {
        border-inline-end-width: $kendo-grid-sticky-cell-border-width;
        border-inline-start-width: 0;
    }

    .k-filter-menu-container {
        padding: 0 $kendo-filter-menu-container-padding-x $kendo-filter-menu-container-padding-y;
        gap: $kendo-grid-column-menu-spacing;


        .k-actions {
            padding-block-start: calc( #{$kendo-filter-menu-container-padding-y} - #{$kendo-grid-column-menu-spacing} );
            padding-block-end: 0;
            padding-inline: 0;
        }

        // Angular specific
        kendo-numeric-filter-menu,
        kendo-grid-string-filter-menu,
        kendo-grid-date-filter-menu,
        kendo-grid-numeric-filter-menu,
        kendo-grid-filter-menu-input-wrapper,
        kendo-treelist-string-filter-menu,
        kendo-treelist-date-filter-menu,
        kendo-treelist-numeric-filter-menu,
        kendo-treelist-filter-menu-input-wrapper {
            gap: $kendo-grid-column-menu-spacing;
        }
    }

    .k-multicheck-wrap {
        font-size: $kendo-grid-column-menu-multicheck-font-size;
        line-height: $kendo-grid-column-menu-multicheck-line-height;
    }

    // Column menu
    .k-column-menu-popup,
    .k-grid-columnmenu-popup {

        &.k-popup {
            padding: 0;
            max-width: $kendo-grid-column-menu-max-width;
        }

    }

    .k-column-list-item {
        gap: $kendo-grid-column-menu-item-gap;
    }

    .k-column-menu-group-header-text {
        border-block-end-style: $kendo-grid-column-menu-group-header-border-style;
        font-weight: $kendo-grid-column-menu-group-header-font-weight;
    }

}
