@use "sass:map";
@use "../utils/helpers" as h;
@use "../utils/variables" as vars;

/* @docs */
$sidebar-zindex: map.get(vars.$zindex, "fixed") !default;

$sidebar-overlay-background-color: h.useVar(
    "overlay-background-color"
) !default;
$sidebar-overlay-zindex: map.get(vars.$zindex, "overlay") !default;

$sidebar-content-zindex: map.get(vars.$zindex, "sidebar") !default;
$sidebar-content-max-width: 50vw !default;
$sidebar-content-max-height: 50vh !default;
$sidebar-content-box-shadow: h.useVar("overlay-box-shadow") !default;
$sidebar-content-background-color: h.useVar(
    "control-background-color"
) !default;
$sidebar-content-border-radius: h.useVar("border-radius") !default;
$sidebar-content-border-width: h.useVar("control-border-width") !default;
$sidebar-content-border-style: solid !default;
$sidebar-content-border-color: h.useVar("control-border-color") !default;
/* @docs */

.o-sidebar {
    @include h.defineVar("sidebar-zindex", $sidebar-zindex);
    @include h.defineVar(
        "sidebar-overlay-background-color",
        $sidebar-overlay-background-color
    );
    @include h.defineVar("sidebar-overlay-zindex", $sidebar-overlay-zindex);

    @include h.defineVar("sidebar-content-zindex", $sidebar-content-zindex);
    @include h.defineVar(
        "sidebar-content-box-shadow",
        $sidebar-content-box-shadow
    );
    @include h.defineVar(
        "sidebar-content-background-color",
        $sidebar-content-background-color
    );
    @include h.defineVar(
        "sidebar-content-border-radius",
        $sidebar-content-border-radius
    );
    @include h.defineVar(
        "sidebar-content-border-width",
        $sidebar-content-border-width
    );
    @include h.defineVar(
        "sidebar-content-border-style",
        $sidebar-content-border-style
    );
    @include h.defineVar(
        "sidebar-content-border-color",
        $sidebar-content-border-color
    );

    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    overflow: hidden;

    // disable clickable
    pointer-events: none;

    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    top: 0;
    height: 100%;
    width: 100%;
    z-index: h.useVar("sidebar-zindex");

    &__overlay {
        pointer-events: auto;
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        top: 0;
        background-color: h.useVar("sidebar-overlay-background-color");
        z-index: h.useVar("sidebar-overlay-zindex");
    }

    &__content {
        pointer-events: auto;
        position: absolute;
        overflow: auto;
        z-index: h.useVar("sidebar-content-zindex");

        background-color: h.useVar("sidebar-content-background-color");
        border-width: 0;
        border-style: h.useVar("sidebar-content-border-style");
        border-color: h.useVar("sidebar-content-border-color");
        border-radius: h.useVar("sidebar-content-border-radius");

        box-shadow: h.useVar("sidebar-content-box-shadow");

        transition:
            width h.useVar("transition-duration") h.useVar("transition-timing"),
            height h.useVar("transition-duration") h.useVar("transition-timing");

        // position
        &--right {
            left: auto;
            right: 0;
            border-left-width: h.useVar("sidebar-content-border-width");
        }

        &--left {
            left: 0;
            right: auto;
            border-right-width: h.useVar("sidebar-content-border-width");
        }

        &--top {
            top: 0;
            bottom: auto;
            border-bottom-width: h.useVar("sidebar-content-border-width");
        }

        &--bottom {
            top: auto;
            bottom: 0;
            border-top-width: h.useVar("sidebar-content-border-width");
        }

        &--fullwidth {
            width: 100%;
            max-width: 100%;
        }

        &--fullheight {
            height: 100%;
            max-height: 100%;
        }
    }

    &--inline {
        @include h.defineVar("sidebar-zindex", "unset");
        @include h.defineVar("sidebar-content-zindex", "unset");

        position: relative;

        .o-sidebar__content {
            position: relative;
            border-width: 0;
            width: 100%;
            height: 100%;
        }
    }
}
