/*
  PANEL
  -----

  The friendly panel is an all-purpose container for hiding content off-screen.

  Features:
   - Position at top, right, bottom, or left
   - Anchor to grid block or window
   - Define max width or height
   - Transform into grid block depending on screen size
*/

/// @Foundation.settings
// Panel
$panel-size-horizontal: 300px !default;
$panel-size-vertical: 300px !default;
$panel-padding: 0 !default;

$panel-background: #fff !default;
$panel-shadow: 3px 0 10px rgba(black, 0.25) !default;

// DEPRECATED: these variables will be removed in a future version.
$panel-animation-speed: 0.25s !default;
///

%panel-base {
    position: absolute;
    z-index: 100;
    overflow-y: auto;
    display: none;

    &.is-active {
        display: block;
    }
}

@mixin panel-layout($position: left, $size: default, $shadow: $panel-shadow) {
    @if $size == default {
        @if $position == left or $position == right {
            $size: $panel-size-horizontal;
        }
        @if $position == top or $position == bottom {
            $size: $panel-size-vertical;
        }
    }

    /*
    Direction
  */
    @if $position == top {
        top: 0;
        left: 0;
        width: 100%;
    } @else if $position == right {
        top: 0;
        right: 0;
        height: 100%;
    } @else if $position == bottom {
        bottom: 0;
        left: 0;
        width: 100%;
    } @else if $position == left {
        top: 0;
        left: 0;
        height: 100%;
    }

    /*
    Sizing
  */
    // Horizontal panels are always all the way tall and have a set width
    @if $position == left or $position == right {
        @if unit($size) == "%" {
            width: $size;
        } @else {
            width: 100%;
            @include breakpoint($size) {
                width: $size;
            }
        }
    }
    // (For now) vertical panels don't change size
    @if $position == top or $position == bottom {
        height: $size;
    }

    /*
    Shadows
  */
    $shadow-distance: get-shadow-value($shadow, x);
    $shadow-size: get-shadow-value($shadow, size);
    $shadow-color: get-shadow-value($shadow, color);
    &.is-active {
        @if $position == left {
            box-shadow: $shadow-distance 0 $shadow-size $shadow-color;
        } @else if $position == right {
            box-shadow: (-$shadow-distance) 0 $shadow-size $shadow-color;
        } @else if $position == top {
            box-shadow: 0 $shadow-distance $shadow-size $shadow-color;
        } @else if $position == bottom {
            box-shadow: 2px (-$shadow-distance) $shadow-size $shadow-color;
        }
    }
}

@mixin panel-style($padding: $panel-padding, $background: $panel-background) {
    /*
    Basic styles
  */
    padding: $padding;
    background: $background;
}

@include exports(panel) {
    .panel {
        @extend %panel-base;
        @include panel-style;
    }

    .panel-top {
        @include panel-layout(top);
    }
    .panel-right {
        @include panel-layout(right);
    }
    .panel-bottom {
        @include panel-layout(bottom);
    }
    .panel-left {
        @include panel-layout(left);
    }

    .panel-fixed {
        position: fixed;
    }
}
