mirror of
https://seed.radicle.dev/rad:z4D5UCArafTzTQpDZNQRuqswh3ury.git
synced 2026-11-15 16:10:38 +08:00
77 lines
1.8 KiB
Svelte
77 lines
1.8 KiB
Svelte
<script lang="ts">
|
|
import type { ErrorWrapper } from "@bindings/error/ErrorWrapper";
|
|
import type { Snippet } from "svelte";
|
|
|
|
import Border from "@app/components/Border.svelte";
|
|
import Command from "@app/components/Command.svelte";
|
|
import ExternalLink from "@app/components/ExternalLink.svelte";
|
|
import Icon from "@app/components/Icon.svelte";
|
|
|
|
const {
|
|
title = "An error occurred",
|
|
children,
|
|
error,
|
|
}: { title?: string; children?: Snippet; error?: ErrorWrapper } = $props();
|
|
</script>
|
|
|
|
<style>
|
|
.error-container {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
.error-icon {
|
|
color: var(--color-fill-);
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.error-title {
|
|
font-size: var(--font-size-large);
|
|
font-weight: var(--font-weight-bold);
|
|
margin: 0 0 0.75rem 0;
|
|
}
|
|
|
|
.error-support {
|
|
padding: 0 2rem;
|
|
margin-bottom: 0;
|
|
}
|
|
</style>
|
|
|
|
<div class="error-container txt-small">
|
|
<Border
|
|
styleMaxWidth="45rem"
|
|
variant="float"
|
|
styleJustifyContent="center"
|
|
styleBackgroundColor="var(--color-background-float)"
|
|
styleDisplay="flex"
|
|
styleFlexDirection="column"
|
|
stylePadding="1.5rem">
|
|
<div class="error-icon">
|
|
<Icon size="32" name="warning" />
|
|
</div>
|
|
|
|
<h2 class="error-title">{title}</h2>
|
|
|
|
{#if children}
|
|
<p class="error-support" style:text-align="center">
|
|
{@render children()}
|
|
</p>
|
|
{/if}
|
|
|
|
<p class="error-support">
|
|
If this problem persists, please contact
|
|
<ExternalLink
|
|
href="https://radicle.zulipchat.com/#narrow/channel/444463-desktop/topic/support">
|
|
support{error ? " with the error details below." : "."}
|
|
</ExternalLink>
|
|
</p>
|
|
|
|
{#if error?.message}
|
|
<Command styleWidth="30rem" showPrompt={false} command={error.message} />
|
|
{/if}
|
|
</Border>
|
|
</div>
|