2025-03-20 19:55:12 +00:00
|
|
|
<script lang="ts">
|
2025-07-29 17:53:48 +00:00
|
|
|
import {debounce} from "throttle-debounce"
|
|
|
|
|
import Scanner from "@lib/components/Scanner.svelte"
|
2025-03-20 19:55:12 +00:00
|
|
|
import Button from "@lib/components/Button.svelte"
|
|
|
|
|
import Field from "@lib/components/Field.svelte"
|
2025-09-10 22:26:39 +00:00
|
|
|
import CpuBolt from "@assets/icons/cpu-bolt.svg?dataurl"
|
|
|
|
|
import QrCode from "@assets/icons/qr-code.svg?dataurl"
|
2025-03-20 19:55:12 +00:00
|
|
|
import Icon from "@lib/components/Icon.svelte"
|
2025-07-29 17:53:48 +00:00
|
|
|
import InfoBunker from "@app/components/InfoBunker.svelte"
|
2026-06-08 21:14:40 +00:00
|
|
|
import type {Nip46Controller} from "@app/nip46"
|
|
|
|
|
import {pushModal} from "@app/modal"
|
2025-03-20 19:55:12 +00:00
|
|
|
|
|
|
|
|
type Props = {
|
2025-07-29 17:53:48 +00:00
|
|
|
controller: Nip46Controller
|
2025-03-20 19:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
2025-07-29 17:53:48 +00:00
|
|
|
const {controller}: Props = $props()
|
|
|
|
|
const {loading, bunker} = controller
|
|
|
|
|
|
|
|
|
|
const toggleScanner = () => {
|
|
|
|
|
showScanner = !showScanner
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const onScan = debounce(1000, async (data: string) => {
|
|
|
|
|
showScanner = false
|
|
|
|
|
$bunker = data
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
let showScanner = $state(false)
|
2025-03-20 19:55:12 +00:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<Field>
|
|
|
|
|
{#snippet label()}
|
|
|
|
|
<p>Bunker Link*</p>
|
|
|
|
|
{/snippet}
|
|
|
|
|
{#snippet input()}
|
|
|
|
|
<label class="input input-bordered flex w-full items-center gap-2">
|
2025-09-10 22:26:39 +00:00
|
|
|
<Icon icon={CpuBolt} />
|
2025-07-29 17:53:48 +00:00
|
|
|
<input disabled={$loading} bind:value={$bunker} class="grow" placeholder="bunker://" />
|
|
|
|
|
<Button onclick={toggleScanner}>
|
2025-09-10 22:26:39 +00:00
|
|
|
<Icon icon={QrCode} />
|
2025-07-29 17:53:48 +00:00
|
|
|
</Button>
|
2025-03-20 19:55:12 +00:00
|
|
|
</label>
|
|
|
|
|
{/snippet}
|
|
|
|
|
{#snippet info()}
|
|
|
|
|
<p>
|
|
|
|
|
A login link provided by a nostr signing app.
|
|
|
|
|
<Button class="link" onclick={() => pushModal(InfoBunker)}>What is a bunker link?</Button>
|
|
|
|
|
</p>
|
|
|
|
|
{/snippet}
|
|
|
|
|
</Field>
|
2025-07-29 17:53:48 +00:00
|
|
|
{#if showScanner}
|
|
|
|
|
<Scanner onscan={onScan} />
|
|
|
|
|
{/if}
|