forked from coracle/flotilla
51 lines
1.4 KiB
Svelte
51 lines
1.4 KiB
Svelte
<script lang="ts">
|
|
import type {Readable} from "svelte/store"
|
|
import Check from "@assets/icons/check.svg?dataurl"
|
|
import DangerTriangle from "@assets/icons/danger-triangle.svg?dataurl"
|
|
import Icon from "@lib/components/Icon.svelte"
|
|
import RelayList from "@app/components/RelayList.svelte"
|
|
import {pushModal} from "@app/util/modal"
|
|
|
|
interface Props {
|
|
icon: string
|
|
title: string
|
|
subtitle: string
|
|
relays: Readable<string[]>
|
|
addRelay: (url: string) => unknown
|
|
removeRelay: (url: string) => unknown
|
|
matchRelay?: (url: string) => boolean
|
|
}
|
|
|
|
const {icon, title, relays, subtitle, addRelay, removeRelay, matchRelay}: Props = $props()
|
|
|
|
const onclick = () =>
|
|
pushModal(RelayList, {title, subtitle, relays, addRelay, removeRelay, matchRelay})
|
|
</script>
|
|
|
|
<button
|
|
type="button"
|
|
class="btn font-normal flex h-[unset] w-full flex-nowrap py-4 text-left items-start justify-between"
|
|
{onclick}>
|
|
<div class="flex flex-grow flex-row items-start gap-4">
|
|
<div class="flex h-7 w-7 flex-shrink-0 items-center justify-center">
|
|
<Icon {icon} />
|
|
</div>
|
|
<div class="flex flex-col gap-1">
|
|
<p class="text-lg">
|
|
{title}
|
|
</p>
|
|
<p class="text-sm">
|
|
{subtitle}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center justify-end gap-1">
|
|
{#if $relays.length <= 1}
|
|
<Icon icon={DangerTriangle} />
|
|
{:else}
|
|
<Icon icon={Check} />
|
|
{/if}
|
|
{$relays.length}
|
|
</div>
|
|
</button>
|