add back-to-home link on monero page and seed reveal in evm settings

This commit is contained in:
2026-05-28 21:31:43 +08:00
parent 2cbf3bb33b
commit 9e579f957d
3 changed files with 66 additions and 0 deletions
@@ -525,6 +525,7 @@ export const EvmWallet = () => {
resetApp,
unlockWithBiometrics,
unlockWithPassword,
hashPassword,
selectWallet,
selectAndUnlockWallet,
unlockWallet,
@@ -59,6 +59,9 @@
to get started
</p>
{:else if w.accountType === 'monero'}
<a href="/" class="text-xs text-muted-foreground underline mb-1 inline-block">
← Back to home
</a>
{#if w.downloading}
<Card>
<CardContent>
+62
View File
@@ -1,6 +1,8 @@
<script lang="ts">
import { evmWallet as wallet } from '$lib/states/evm-wallet.svelte.js'
import { electrobun } from '$lib/electrobun.js'
import { Button } from '$lib/components/ui/button/index.js'
import { Input } from '$lib/components/ui/input/index.js'
import {
Card,
CardContent,
@@ -10,6 +12,8 @@
} from '$lib/components/ui/card/index.js'
import { navigate } from 'sv-router/generated'
import ArrowLeft from '@lucide/svelte/icons/arrow-left'
import Eye from '@lucide/svelte/icons/eye'
import Fingerprint from '@lucide/svelte/icons/fingerprint'
import Trash2 from '@lucide/svelte/icons/trash-2'
import WalletIcon from '@lucide/svelte/icons/wallet'
@@ -18,6 +22,9 @@
let resetting = $state(false)
let deletingWalletId = $state<string | null>(null)
let flushing = $state(false)
let seedRevealed = $state(false)
let seedPassword = $state('')
let seedError = $state('')
async function handleReset() {
resetting = true
@@ -85,6 +92,61 @@
</CardContent>
</Card>
{/if}
{#if w.seed}
<Card>
<CardHeader>
<CardTitle>Seed Phrase</CardTitle>
<CardDescription>Reveal your wallet recovery phrase</CardDescription>
</CardHeader>
<CardContent>
{#if seedRevealed}
<div class="rounded-md border border-destructive/50 bg-destructive/5 p-3">
<p class="text-xs text-destructive font-medium mb-2">
Never share your seed phrase. Anyone with it can access your funds.
</p>
<p class="font-mono text-xs break-all">{w.seed}</p>
</div>
<Button variant="outline" size="sm" class="mt-3" onclick={() => { seedRevealed = false; seedPassword = ''; seedError = '' }}>
<Eye size={14} /> Hide
</Button>
{:else}
<div class="space-y-2">
{#if w.currentPasswordHash}
<div class="flex gap-2 items-end">
<Input type="password" placeholder="Enter password" bind:value={seedPassword} />
<Button onclick={async () => {
seedError = ''
const { salt, hash } = JSON.parse(w.currentPasswordHash!)
const { hash: check } = await w.hashPassword(seedPassword, salt)
if (check === hash) {
seedRevealed = true
} else {
seedError = 'Incorrect password'
}
seedPassword = ''
}}>Reveal</Button>
</div>
{/if}
{#if w.biometricAvailable}
<Button variant="outline" class="w-full" onclick={async () => {
seedError = ''
const ok = await electrobun.rpc?.request.biometricAuth({ reason: 'Reveal seed phrase' })
if (ok) seedRevealed = true
}}>
<Fingerprint size={14} /> Reveal with Touch ID
</Button>
{/if}
{#if !w.currentPasswordHash && !w.biometricAvailable}
<Button onclick={() => (seedRevealed = true)}>Reveal Seed Phrase</Button>
{/if}
{#if seedError}
<p class="text-xs text-destructive">{seedError}</p>
{/if}
</div>
{/if}
</CardContent>
</Card>
{/if}
<Card>
<CardHeader>
<CardTitle>Settings</CardTitle>