// =============================================================================
// 31-modules / offcanvas / mixins
// =============================================================================

@use "sass:map";
@use "./offcanvas.config" as config;
@use "../../01-core/external" as *;

@mixin ss-offcanvas-backdrop {
    position: fixed;
    inset: 0;
    z-index: map.get(config.$offcanvas-config, "z-index-backdrop");
    width: 100vw;
    height: 100vh;
    background-color: map.get(config.$offcanvas-config, "backdrop-color");
    opacity: 0;
    visibility: hidden;
    transition:
        opacity #{map.get(config.$offcanvas-config, "transition")},
        visibility #{map.get(config.$offcanvas-config, "transition")};

    &.is-open,
    &.show {
        opacity: 1;
        visibility: visible;
    }
}

@mixin ss-offcanvas {
    position: fixed;
    bottom: 0;
    z-index: map.get(config.$offcanvas-config, "z-index-panel");
    display: flex;
    flex-direction: column;
    max-width: 100%;
    color: map.get(config.$offcanvas-config, "color");
    visibility: hidden;
    background-color: map.get(config.$offcanvas-config, "background");
    background-clip: padding-box;
    outline: 0;
    transition: transform #{map.get(config.$offcanvas-config, "transition")};

    &.is-open,
    &.show {
        visibility: visible;
    }
}

@mixin ss-offcanvas-start {
    @include ss-offcanvas;
    top: 0;
    left: 0;
    width: map.get(config.$offcanvas-config, "width-default");
    border-right: q(1) solid map.get(config.$offcanvas-config, "border-color");
    transform: translateX(-100%);
    &.is-open,
    &.show {
        transform: translateX(0);
    }
}

@mixin ss-offcanvas-end {
    @include ss-offcanvas;
    top: 0;
    right: 0;
    width: map.get(config.$offcanvas-config, "width-default");
    border-left: q(1) solid map.get(config.$offcanvas-config, "border-color");
    transform: translateX(100%);
    &.is-open,
    &.show {
        transform: translateX(0);
    }
}

@mixin ss-offcanvas-top {
    @include ss-offcanvas;
    top: 0;
    right: 0;
    left: 0;
    height: auto;
    max-height: 100%;
    border-bottom: q(1) solid map.get(config.$offcanvas-config, "border-color");
    transform: translateY(-100%);
    &.is-open,
    &.show {
        transform: translateY(0);
    }
}

@mixin ss-offcanvas-bottom {
    @include ss-offcanvas;
    right: 0;
    left: 0;
    height: auto;
    max-height: 100%;
    border-top: q(1) solid map.get(config.$offcanvas-config, "border-color");
    transform: translateY(100%);
    &.is-open,
    &.show {
        transform: translateY(0);
    }
}

@mixin ss-offcanvas-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: map.get(config.$offcanvas-config, "padding");
    border-bottom: q(1) solid map.get(config.$offcanvas-config, "border-color");
}

@mixin ss-offcanvas-title {
    margin: 0;
    line-height: 1.5;
    font-size: q(18);
    font-weight: 500;
}

@mixin ss-offcanvas-body {
    flex-grow: 1;
    padding: map.get(config.$offcanvas-config, "padding");
    overflow-y: auto;
}

@mixin ss-offcanvas-close {
    padding: q(8);
    margin-left: auto;
    background: transparent;
    border: 0;
    cursor: pointer;
    opacity: 0.5;
    transition: opacity 0.15s ease;
    &:hover {
        opacity: 1;
    }
}
