53 lines
1.6 KiB
Svelte
53 lines
1.6 KiB
Svelte
<script lang="ts">
|
|
import { getContext } from 'svelte';
|
|
const { close } = getContext('simple-modal');
|
|
export let title: string = 'Error';
|
|
export let reason: string;
|
|
export let btn: { title: string; do: any } = null;
|
|
|
|
const perform = () => {
|
|
close();
|
|
btn.do();
|
|
};
|
|
|
|
let cleaned = '';
|
|
$: {
|
|
let first = reason[0] || '';
|
|
let rest = reason.slice(1) || '';
|
|
|
|
if (!['.', '!'].includes(rest.slice(-1))) {
|
|
rest += '.';
|
|
}
|
|
cleaned = first.toUpperCase() + rest;
|
|
}
|
|
</script>
|
|
|
|
<div class="sm:flex sm:items-start pl-3 pt-2">
|
|
<div
|
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10"
|
|
>
|
|
<!-- prettier-ignore -->
|
|
<svg class="h-6 w-6 text-red-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
|
</svg>
|
|
</div>
|
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
|
<h3 class="text-xl leading-6 font-medium text-gray-900" id="modal-title">
|
|
{title}
|
|
</h3>
|
|
<div class="mt-2">
|
|
<p class="text-lg text-gray-500">{cleaned}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse gap-4">
|
|
{#if btn}
|
|
<button type="button" class="btn px-2 text-lg md:py-1 rounded" on:click={perform}>
|
|
{btn.title}
|
|
</button>
|
|
{/if}
|
|
<button type="button" class="btn cancel px-2 text-lg md:py-1 rounded" on:click={close}>
|
|
Close
|
|
</button>
|
|
</div>
|