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:
archipelago
2026-06-17 19:21:42 -04:00
co-authored by Claude Opus 4.8
parent bd567cd165
commit 87769cbfbf
46 changed files with 1527 additions and 283 deletions
+11 -20
View File
@@ -1,24 +1,6 @@
<template>
<div class="pb-16 md:pb-6">
<!-- Desktop Back Button -->
<button @click="router.push('/dashboard/web5')" class="hidden md:flex mb-6 items-center gap-2 text-white/70 hover:text-white transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
</svg>
Web5
</button>
<!-- Mobile Back Button -->
<Teleport to="body">
<button
@click="router.push('/dashboard/web5')"
class="md:hidden mobile-back-btn glass-button px-6 py-3 rounded-lg font-medium shadow-2xl flex items-center justify-center gap-2"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
</svg>
<span>Web5</span>
</button>
</Teleport>
<BackButton :label="backLabel" desktop-margin="mb-6" @click="router.push(backTarget)" />
<div class="hidden md:block mb-8">
<div class="flex items-center justify-between">
@@ -233,10 +215,11 @@
<script setup lang="ts">
import { ref, computed, onMounted, onUnmounted } from 'vue'
import { useRouter } from 'vue-router'
import { useRouter, useRoute } from 'vue-router'
import { useI18n } from 'vue-i18n'
import { rpcClient } from '@/api/rpc-client'
import { useHomeStatusStore } from '@/stores/homeStatus'
import BackButton from '@/components/BackButton.vue'
import LineChart from '@/components/LineChart.vue'
import ToggleSwitch from '@/components/ToggleSwitch.vue'
import type { ChartDataset } from '@/components/LineChart.vue'
@@ -297,7 +280,15 @@ interface FiredAlert {
}
const router = useRouter()
const route = useRoute()
const { t } = useI18n()
// Monitoring is reachable from Web5 (the monitoring link) AND from the Home
// "System" card (which passes ?from=home). The back button follows the entry
// point so it returns where the user came from instead of always Web5.
const cameFromHome = computed(() => route.query.from === 'home')
const backTarget = computed(() => (cameFromHome.value ? '/dashboard' : '/dashboard/web5'))
const backLabel = computed(() => (cameFromHome.value ? t('common.back') : 'Web5'))
const homeStatus = useHomeStatusStore()
const current = ref<MetricSnapshot | null>(null)