SideBar.svelte 1.5 KB
<script>
    import { fly } from 'svelte/transition';
    
    export let show = true;
    export let side = "left";
    </script>

<style>
    .nav {
        overflow-y: auto;
        overflow-x: hidden;
    }

    .left {
        position: fixed;
        top: 0;
        left: 0;
        height: 100%;
        border-right: 1px solid #aaa;
        background: #fff;
        overflow-y: auto;
        width: 330px;
        z-index: 900;
        white-space: pre-line;
    }

    .right {
        position: fixed;
        top: 0;
        right: 0;
        height: 100%;
        border-left: 1px solid #aaa;
        background: #fff;
        overflow-y: auto;
        width: 330px;
        z-index: 900;
    }

    .navtop {
        display: flex;
		width: 100%;
		height: 60px;
        background-color: white;
        font-size: 30pt;
        color: #AAAAAA;
        justify-content: right;
        padding: 5px 5px 5px;
        border-bottom: #999999 solid 1px;
    }
    
    .navitems {
        display: flex;
        padding: 2rem 1rem 0.6rem;
        flex-direction: column
    }
    
</style>

{#if show} 
    <nav class={"nav " + side} transition:fly={{x: (side == "left" ? -400 : 400), opacity: 1, duration: 800}}>
        <div class="navtop" on:click={() => {show = false;}}
             style="justify-content:{side == "left" ? "right" : "left"}; cursor:pointer;">
            { side == "left" ? "<" : ">" }
        </div>
        <div class="navitems">
            <slot> 

            </slot>
        </div>
    </nav>
{/if}