mirror of
https://github.com/imputnet/cobalt.git
synced 2025-06-28 09:28:29 +00:00
71 lines
1.5 KiB
Svelte
71 lines
1.5 KiB
Svelte
<script lang="ts">
|
|
import { onDestroy } from "svelte";
|
|
import type { DialogButton } from "$lib/types/dialog";
|
|
|
|
export let button: DialogButton;
|
|
export let closeFunc: () => void;
|
|
|
|
let disabled = false;
|
|
let seconds = 0;
|
|
|
|
if (button.timeout) {
|
|
disabled = true;
|
|
seconds = Math.round(button.timeout / 1000);
|
|
|
|
let interval = setInterval(() => {
|
|
seconds--;
|
|
if (seconds <= 0) {
|
|
clearInterval(interval);
|
|
disabled = false;
|
|
}
|
|
}, 1000);
|
|
|
|
onDestroy(() => clearInterval(interval));
|
|
}
|
|
</script>
|
|
{#if button.link}
|
|
<a
|
|
class="button elevated link-button"
|
|
class:color={button.color}
|
|
class:active={button.main}
|
|
href={button.link}
|
|
>
|
|
{button.text}
|
|
</a>
|
|
{:else}
|
|
<button
|
|
class="button elevated popup-button {button.color}"
|
|
class:color={button.color}
|
|
class:active={button.main}
|
|
{disabled}
|
|
on:click={async () => {
|
|
await button.action();
|
|
closeFunc();
|
|
}}
|
|
>
|
|
{button.text}{seconds ? ` (${seconds})` : ""}
|
|
</button>
|
|
{/if}
|
|
<style>
|
|
.link-button {
|
|
text-decoration: none;
|
|
font-weight: 500;
|
|
width: 100%;
|
|
}
|
|
|
|
.popup-button {
|
|
width: 100%;
|
|
height: 40px;
|
|
transition: 0.2s opacity;
|
|
}
|
|
|
|
.popup-button.red {
|
|
background-color: var(--red);
|
|
color: var(--white);
|
|
}
|
|
|
|
.popup-button[disabled] {
|
|
opacity: 0.6;
|
|
}
|
|
</style>
|