Spaces:
Sleeping
Sleeping
<script lang="ts"> | |
import { t } from "$lib/i18n/translations"; | |
import IconComet from "@tabler/icons-svelte/IconComet.svelte"; | |
</script> | |
<div id="update-notification" role="alert" aria-atomic="true"> | |
<button class="update-button" on:click={() => window.location.reload()}> | |
<div class="update-icon"> | |
<IconComet /> | |
</div> | |
<div class="update-text"> | |
<div>{$t("notification.update.title")}</div> | |
<div class="subtext">{$t("notification.update.subtext")}</div> | |
</div> | |
</button> | |
</div> | |
<style> | |
#update-notification { | |
position: absolute; | |
display: flex; | |
justify-content: end; | |
align-items: center; | |
width: 100%; | |
pointer-events: none; | |
z-index: 2; | |
} | |
.update-button { | |
padding: 8px 12px 8px 8px; | |
pointer-events: all; | |
gap: 8px; | |
margin: var(--padding); | |
margin-top: calc(env(safe-area-inset-top) + var(--padding)); | |
box-shadow: | |
var(--button-box-shadow), | |
0 0 10px 0px var(--button-elevated-hover); | |
border-radius: 14px; | |
animation: slide-in-top 0.4s; | |
} | |
.update-icon { | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
background-color: var(--button-elevated-hover); | |
padding: 3px; | |
border-radius: 6px; | |
} | |
.update-icon :global(svg) { | |
stroke-width: 1.5px; | |
width: 25px; | |
height: 25px; | |
will-change: transform; | |
} | |
.update-text { | |
display: flex; | |
flex-direction: column; | |
text-align: start; | |
font-size: 13px; | |
} | |
.subtext { | |
padding: 0; | |
user-select: none; | |
-webkit-user-select: none; | |
} | |
.update-text, | |
.subtext { | |
line-height: 1.2; | |
} | |
@keyframes slide-in-top { | |
from { | |
transform: translateY(-150px); | |
} | |
100% { | |
transform: none; | |
} | |
} | |
@media screen and (max-width: 535px) { | |
#update-notification { | |
bottom: var(--sidebar-height-mobile); | |
justify-content: center; | |
animation: slide-in-bottom 0.4s; | |
} | |
@keyframes slide-in-bottom { | |
from { | |
transform: translateY(300px); | |
} | |
100% { | |
transform: none; | |
} | |
} | |
} | |
</style> | |