Updated the 'Popup' component to be more friendly closed.
This commit is contained in:
parent
1fba9c2620
commit
1d3673cdf7
5 changed files with 81 additions and 14 deletions
|
@ -1,6 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
import "$lib/css/popup.css";
|
import "$lib/css/popup.css";
|
||||||
import { popupComponent } from "$lib/ts/popup.ts";
|
import { popupComponent } from "$lib/ts/popup.ts";
|
||||||
|
import { get } from "svelte/store";
|
||||||
|
import SvgIcon from "@jamescoyle/svelte-icon";
|
||||||
|
import { mdiClose } from "@mdi/js";
|
||||||
|
|
||||||
let component = null;
|
let component = null;
|
||||||
|
|
||||||
|
@ -11,16 +14,52 @@
|
||||||
function close() {
|
function close() {
|
||||||
popupComponent.set(null);
|
popupComponent.set(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onKeyDown(e) {
|
||||||
|
if (get(popupComponent) != null && e.key === "Escape") {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<svelte:window on:keydown|preventDefault={onKeyDown} />
|
||||||
{#if component}
|
{#if component}
|
||||||
|
<div
|
||||||
|
class="on-popup"
|
||||||
|
role="alertdialog"
|
||||||
|
tabindex="0"
|
||||||
|
on:keydown={(e) => {
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div class="flex align-center">
|
||||||
|
<div
|
||||||
|
class="flex-end popup-close"
|
||||||
|
role="button"
|
||||||
|
tabindex="0"
|
||||||
|
on:click={close}
|
||||||
|
on:keydown={(e) => {
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SvgIcon type="mdi" path={mdiClose} size="35" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<svelte:component this={component.component} {...component.props} />
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
class="popup"
|
class="popup"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="-1"
|
||||||
on:click={close}
|
on:click={close}
|
||||||
on:keydown={(e) => e.key === "Escape" && close()}
|
on:keydown={(e) => {
|
||||||
>
|
if (e.key === "Escape") {
|
||||||
<svelte:component this={component.component} {...component.props} />
|
close();
|
||||||
</div>
|
}
|
||||||
|
}}
|
||||||
|
></div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -42,6 +42,7 @@ h2 {
|
||||||
|
|
||||||
--background-light: linear-gradient(180deg, rgba(248, 241, 241, 1) 0%, rgba(15, 11, 17, 0.1) 100%);
|
--background-light: linear-gradient(180deg, rgba(248, 241, 241, 1) 0%, rgba(15, 11, 17, 0.1) 100%);
|
||||||
--background-dark: linear-gradient(180deg, rgba(248, 241, 241, 1) 0%, rgba(224, 217, 217, 1) 100%);
|
--background-dark: linear-gradient(180deg, rgba(248, 241, 241, 1) 0%, rgba(224, 217, 217, 1) 100%);
|
||||||
|
--background-purple: linear-gradient(to right, #241d25c4 0%, #3d2b47c4 100%);
|
||||||
--shadow: rgba(79, 50, 93, 0.25) 0px 30px 60px -12px, rgba(0, 0, 0, 0.3) 0px 18px 36px -18px;
|
--shadow: rgba(79, 50, 93, 0.25) 0px 30px 60px -12px, rgba(0, 0, 0, 0.3) 0px 18px 36px -18px;
|
||||||
--shadow-hover: rgba(43, 33, 48, 0.5) 0px 22px 70px 4px;
|
--shadow-hover: rgba(43, 33, 48, 0.5) 0px 22px 70px 4px;
|
||||||
--shadow-active: #2c1235a0 0px 20px 30px -10px;
|
--shadow-active: #2c1235a0 0px 20px 30px -10px;
|
||||||
|
@ -50,6 +51,7 @@ h2 {
|
||||||
--z-index-front: 1;
|
--z-index-front: 1;
|
||||||
--z-index-navbar: 2;
|
--z-index-navbar: 2;
|
||||||
--z-index-popup: 3;
|
--z-index-popup: 3;
|
||||||
|
--z-index-on-popup: 4;
|
||||||
|
|
||||||
--border-min: 0.5rem;
|
--border-min: 0.5rem;
|
||||||
--border-max: 2rem;
|
--border-max: 2rem;
|
||||||
|
|
|
@ -116,11 +116,6 @@
|
||||||
/* Pop-up Hover Card */
|
/* Pop-up Hover Card */
|
||||||
|
|
||||||
.hover-card-popup-container {
|
.hover-card-popup-container {
|
||||||
width: calc(100% - 12rem);
|
width: 100%;
|
||||||
height: calc(100% - 12rem);
|
height: 100%;
|
||||||
margin: 5rem;
|
|
||||||
padding: 1rem;
|
|
||||||
background-image: var(--background-dark);
|
|
||||||
border-radius: 1rem;
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
}
|
}
|
|
@ -145,7 +145,7 @@ a {
|
||||||
/* Floating */
|
/* Floating */
|
||||||
|
|
||||||
.floating {
|
.floating {
|
||||||
background-image: linear-gradient(to right, #241d25c4 0%, #3d2b47c4 100%);
|
background-image: var(--background-purple);
|
||||||
box-shadow: rgba(52, 42, 58, 0.25) 0px 50px 100px -20px, rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
box-shadow: rgba(52, 42, 58, 0.25) 0px 50px 100px -20px, rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||||
border-bottom-left-radius: 2rem;
|
border-bottom-left-radius: 2rem;
|
||||||
border-bottom-right-radius: 2rem;
|
border-bottom-right-radius: 2rem;
|
||||||
|
|
|
@ -13,3 +13,34 @@
|
||||||
-webkit-backdrop-filter: var(--popup-blur);
|
-webkit-backdrop-filter: var(--popup-blur);
|
||||||
backdrop-filter: var(--popup-blur);
|
backdrop-filter: var(--popup-blur);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.on-popup {
|
||||||
|
width: 80dvw;
|
||||||
|
height: 80dvh;
|
||||||
|
position: fixed;
|
||||||
|
left: 10dvw;
|
||||||
|
top: 10dvh;
|
||||||
|
z-index: var(--z-index-on-popup);
|
||||||
|
padding: 1.2rem;
|
||||||
|
background-image: var(--background-dark);
|
||||||
|
border-radius: 1rem;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-close {
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-close svg {
|
||||||
|
border-radius: 100%;
|
||||||
|
padding: 0.3rem;
|
||||||
|
transition: var(--transition);
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-close svg:hover {
|
||||||
|
background-color: var(--color-text);
|
||||||
|
color: var(--color-background);
|
||||||
|
box-shadow: var(--shadow-hover);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue