2025-07-07 22:28:36 +00:00
|
|
|
<script lang="ts">
|
2026-09-12 03:29:19 +00:00
|
|
|
import {now, DAY, removeUndefined} from "@welshman/lib"
|
2026-07-28 16:16:26 +00:00
|
|
|
import type {TrustedEvent} from "@welshman/util"
|
2026-09-12 03:29:19 +00:00
|
|
|
import {fromMsats} from "@welshman/util"
|
|
|
|
|
import {ZapGoals} from "@welshman/app"
|
2025-09-10 22:26:39 +00:00
|
|
|
import Bolt from "@assets/icons/bolt.svg?dataurl"
|
2025-07-07 22:28:36 +00:00
|
|
|
import Icon from "@lib/components/Icon.svelte"
|
|
|
|
|
import ZapButton from "@app/components/ZapButton.svelte"
|
2026-09-12 03:29:19 +00:00
|
|
|
import {app} from "@app/core"
|
2025-07-07 22:28:36 +00:00
|
|
|
|
|
|
|
|
type Props = {
|
2025-10-06 18:23:19 +00:00
|
|
|
url?: string
|
2025-07-07 22:28:36 +00:00
|
|
|
event: TrustedEvent
|
2025-10-06 18:23:19 +00:00
|
|
|
class?: string
|
2025-07-07 22:28:36 +00:00
|
|
|
}
|
|
|
|
|
|
2025-10-06 18:23:19 +00:00
|
|
|
const {url, event, ...props}: Props = $props()
|
2025-07-07 22:28:36 +00:00
|
|
|
|
2026-09-12 03:29:19 +00:00
|
|
|
const progress = $app.use(ZapGoals).progress(event, removeUndefined([url])).$
|
2026-07-28 16:16:26 +00:00
|
|
|
|
2025-07-07 22:28:36 +00:00
|
|
|
const daysOld = Math.ceil((now() - event.created_at) / DAY)
|
|
|
|
|
</script>
|
|
|
|
|
|
2025-10-06 18:23:19 +00:00
|
|
|
<div class="flex flex-col gap-8 {props.class}">
|
2025-07-07 22:28:36 +00:00
|
|
|
<div class="flex gap-8">
|
|
|
|
|
<div>
|
2026-09-12 03:29:19 +00:00
|
|
|
<p class="text-xl text-primary">{fromMsats($progress.amount)} sats</p>
|
|
|
|
|
<p class="text-sm opacity-75">funded of {fromMsats($progress.target)} sats</p>
|
2025-07-07 22:28:36 +00:00
|
|
|
</div>
|
|
|
|
|
<div>
|
2026-09-12 03:29:19 +00:00
|
|
|
<p class="text-xl">{$progress.contributors.length}</p>
|
|
|
|
|
<p class="text-sm opacity-75">
|
|
|
|
|
{$progress.contributors.length === 1 ? "contributor" : "contributors"}
|
|
|
|
|
</p>
|
2025-07-07 22:28:36 +00:00
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<p class="text-xl">{daysOld}</p>
|
|
|
|
|
<p class="text-sm opacity-75">{daysOld === 1 ? "day" : "days"} old</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-09-14 19:29:05 +00:00
|
|
|
<progress class="progress" value={fromMsats($progress.amount)} max={fromMsats($progress.target)}
|
|
|
|
|
></progress>
|
2026-06-24 20:56:53 +00:00
|
|
|
<ZapButton {url} {event} class="button button-primary lg:m-auto lg:px-20">
|
2025-09-10 22:26:39 +00:00
|
|
|
<Icon icon={Bolt} />
|
2025-07-07 22:28:36 +00:00
|
|
|
Contribute to this goal
|
|
|
|
|
</ZapButton>
|
|
|
|
|
</div>
|