fix(machine): clarify cash-in QR screen is for receiving, not paying

The displayingQR state showed "Waiting for payment..." with an hourglass,
which confused users into thinking they needed to pay. This is an
LNURL-withdraw flow — the user scans to *receive* sats.

- "Preparing payment code" → "Preparing your withdraw code"
- Add prominent "Scan to receive your sats" heading above QR
- "Waiting for payment..." → "Open your wallet and scan to claim"
- "Manual payment options" → "Manual withdraw options"
- "Payment Sent!" → "Sats Sent!"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Patrick Mulligan 2026-02-27 12:40:59 -05:00
commit 03b5720883

View file

@ -309,7 +309,7 @@ const isProcessing = computed(() => atmStore.isPayingInvoice || atmStore.isReque
> >
<CardContent class="flex flex-col items-center gap-4 p-8"> <CardContent class="flex flex-col items-center gap-4 p-8">
<span class="animate-hourglass text-5xl">⏳</span> <span class="animate-hourglass text-5xl">⏳</span>
<p class="text-muted-foreground">Preparing payment code...</p> <p class="text-muted-foreground">Preparing your withdraw code...</p>
</CardContent> </CardContent>
</Card> </Card>
@ -321,7 +321,7 @@ const isProcessing = computed(() => atmStore.isPayingInvoice || atmStore.isReque
<CardContent class="pt-6 space-y-5"> <CardContent class="pt-6 space-y-5">
<!-- Amount Display --> <!-- Amount Display -->
<div class="text-center"> <div class="text-center">
<p class="text-sm text-muted-foreground">Withdraw</p> <p class="text-lg font-semibold text-success">Scan to receive your sats</p>
<p class="text-3xl font-bold text-bitcoin"> <p class="text-3xl font-bold text-bitcoin">
{{ formatSats(context?.satsAmount || 0) }} sats {{ formatSats(context?.satsAmount || 0) }} sats
</p> </p>
@ -391,10 +391,10 @@ const isProcessing = computed(() => atmStore.isPayingInvoice || atmStore.isReque
</div> </div>
</div> </div>
<!-- Waiting for payment indicator --> <!-- Waiting for withdraw indicator -->
<div v-if="currentQrValue" class="flex items-center justify-center gap-2"> <div v-if="currentQrValue" class="flex items-center justify-center gap-2">
<span class="animate-hourglass text-lg">⏳</span> <span class="animate-pulse text-lg">📲</span>
<p class="text-sm text-muted-foreground">Waiting for payment...</p> <p class="text-sm text-muted-foreground">Open your wallet and scan to claim</p>
</div> </div>
<!-- Mode label + truncated URI (web-ui only) --> <!-- Mode label + truncated URI (web-ui only) -->
@ -422,7 +422,7 @@ const isProcessing = computed(() => atmStore.isPayingInvoice || atmStore.isReque
<!-- Alternative: Manual Options (web-ui only, no keyboard on kiosk) --> <!-- Alternative: Manual Options (web-ui only, no keyboard on kiosk) -->
<details v-if="!isElectron" class="rounded-lg bg-card p-3"> <details v-if="!isElectron" class="rounded-lg bg-card p-3">
<summary class="cursor-pointer text-sm text-muted-foreground"> <summary class="cursor-pointer text-sm text-muted-foreground">
Alternative: Manual payment options Alternative: Manual withdraw options
</summary> </summary>
<div class="mt-4 space-y-4"> <div class="mt-4 space-y-4">
<!-- CLINK Debit by pubkey --> <!-- CLINK Debit by pubkey -->
@ -491,7 +491,7 @@ const isProcessing = computed(() => atmStore.isPayingInvoice || atmStore.isReque
<Card v-else-if="nestedState === 'askForReceipt'" class="w-full max-w-80 border-0 bg-card"> <Card v-else-if="nestedState === 'askForReceipt'" class="w-full max-w-80 border-0 bg-card">
<CardContent class="flex flex-col items-center gap-4 p-8"> <CardContent class="flex flex-col items-center gap-4 p-8">
<div class="text-6xl text-success">✅</div> <div class="text-6xl text-success">✅</div>
<CardTitle>Payment Sent!</CardTitle> <CardTitle>Sats Sent!</CardTitle>
<p class="text-muted-foreground">Would you like a receipt?</p> <p class="text-muted-foreground">Would you like a receipt?</p>
<div class="flex h-32 w-32 items-center justify-center rounded-lg bg-qr"> <div class="flex h-32 w-32 items-center justify-center rounded-lg bg-qr">
<p class="text-qr-foreground">📱 Scan npub</p> <p class="text-qr-foreground">📱 Scan npub</p>