feat(ui): dual-ecash wallet settings, buy-peer-files, seed backup, assorted fixes
- Tabbed Wallet Settings modal (Cashu + Fedimint) and dual-balance wallet card - Buy a peer's paid file (ecash / node Lightning / on-chain / external QR) - Recovery-phrase reveal + backup section; onboarding seed retry resilience - NetBird HTTPS launch, remote-control two-finger scroll + external-open - Shared BackButton, single-v version label, mesh Bitcoin header toggles Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
bd567cd165
commit
87769cbfbf
@@ -1,10 +1,36 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { ref, watch } from 'vue'
|
||||
import { useMeshStore } from '@/stores/mesh'
|
||||
import { rpcClient } from '@/api/rpc-client'
|
||||
import ToggleSwitch from '@/components/ToggleSwitch.vue'
|
||||
|
||||
const mesh = useMeshStore()
|
||||
|
||||
// Bitcoin-headers-over-mesh send/receive toggles (issue #28). Initialized from
|
||||
// mesh.status (which now carries the persisted prefs) and saved via mesh.configure.
|
||||
const announceHeaders = ref(false)
|
||||
const receiveHeaders = ref(true)
|
||||
const headersSaving = ref(false)
|
||||
watch(
|
||||
() => mesh.status,
|
||||
(s) => {
|
||||
if (!s) return
|
||||
if (typeof s.announce_block_headers === 'boolean') announceHeaders.value = s.announce_block_headers
|
||||
if (typeof s.receive_block_headers === 'boolean') receiveHeaders.value = s.receive_block_headers
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
async function setAnnounceHeaders(v: boolean) {
|
||||
announceHeaders.value = v
|
||||
headersSaving.value = true
|
||||
try { await mesh.configure({ announce_block_headers: v }) } catch { /* surfaced via store error */ } finally { headersSaving.value = false }
|
||||
}
|
||||
async function setReceiveHeaders(v: boolean) {
|
||||
receiveHeaders.value = v
|
||||
headersSaving.value = true
|
||||
try { await mesh.configure({ receive_block_headers: v }) } catch { /* surfaced via store error */ } finally { headersSaving.value = false }
|
||||
}
|
||||
|
||||
const txHexInput = ref('')
|
||||
const bolt11Input = ref('')
|
||||
const bolt11AmountInput = ref('')
|
||||
@@ -120,6 +146,22 @@ async function handleRelayLightning() {
|
||||
<span class="mesh-block-hash">{{ h.hash.slice(0, 12) }}...{{ h.hash.slice(-8) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Header send/receive toggles (issue #28) -->
|
||||
<div class="flex items-center justify-between gap-3 pt-3 mt-2 border-t border-white/10">
|
||||
<div class="min-w-0">
|
||||
<span class="mesh-bitcoin-label">Send headers</span>
|
||||
<small class="mesh-bitcoin-hint">Broadcast new block headers to mesh peers (needs internet)</small>
|
||||
</div>
|
||||
<ToggleSwitch :model-value="announceHeaders" :disabled="headersSaving" @update:model-value="setAnnounceHeaders" />
|
||||
</div>
|
||||
<div class="flex items-center justify-between gap-3 pt-3">
|
||||
<div class="min-w-0">
|
||||
<span class="mesh-bitcoin-label">Receive headers</span>
|
||||
<small class="mesh-bitcoin-hint">Accept block headers relayed by peers</small>
|
||||
</div>
|
||||
<ToggleSwitch :model-value="receiveHeaders" :disabled="headersSaving" @update:model-value="setReceiveHeaders" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- On-Chain / Lightning tabs -->
|
||||
|
||||
Reference in New Issue
Block a user