Add a base modal that other modals can expand off of
This commit is contained in:
parent
8035a3afe2
commit
64fbf66e63
1 changed files with 98 additions and 0 deletions
98
web-svelte/src/components/modals/BaseModal.svelte
Normal file
98
web-svelte/src/components/modals/BaseModal.svelte
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { fade, scale } from "svelte/transition";
|
||||||
|
import { createEventDispatcher } from "svelte";
|
||||||
|
import SciFiButton from "../SciFi-Button.svelte";
|
||||||
|
|
||||||
|
const emit = createEventDispatcher();
|
||||||
|
|
||||||
|
|
||||||
|
export let open = false;
|
||||||
|
function closeModal() {
|
||||||
|
emit(`close`);
|
||||||
|
open = false;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if open}
|
||||||
|
<div class="modal">
|
||||||
|
<div
|
||||||
|
class="background clickable"
|
||||||
|
in:fade
|
||||||
|
out:fade="{{ delay: 200 }}"
|
||||||
|
on:click="{closeModal}"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
class="foreground"
|
||||||
|
in:scale="{{ delay: 400, start: 0, opacity: 1 }}"
|
||||||
|
out:scale="{{ start: 0, opacity: 1 }}"
|
||||||
|
>
|
||||||
|
<SciFiButton
|
||||||
|
classes="close-button"
|
||||||
|
handler={closeModal}
|
||||||
|
height="60"
|
||||||
|
width="60"
|
||||||
|
on:click
|
||||||
|
>
|
||||||
|
<div class="icon-container">
|
||||||
|
<span class="material-icons">
|
||||||
|
close
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</SciFiButton>
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import "../../styles/mixins";
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
z-index: 100;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.background {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0,0,0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.foreground {
|
||||||
|
z-index: 101;
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow: auto;
|
||||||
|
width: 90%;
|
||||||
|
padding: 15px;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 10px;
|
||||||
|
|
||||||
|
background: var(--dark-but-not-black);
|
||||||
|
color: #FFFFFF;
|
||||||
|
|
||||||
|
.icon-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.close-button) {
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include medium {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue