import React, { useState, useEffect } from 'react'; import './types'; import { ToastProvider, useToast } from './components/ui/index'; import LockScreen from './pages/LockScreen'; import OnboardingScreen from './pages/OnboardingScreen'; import Dashboard from './pages/Dashboard'; import SendPage from './pages/SendPage'; import HistoryPage from './pages/HistoryPage'; import VoicePage from './pages/VoicePage'; import SecurityPage from './pages/SecurityPage'; import SettingsPage from './pages/SettingsPage'; import ContactsPage from './pages/ContactsPage'; import ScanPage from './pages/ScanPage'; import Sidebar from './components/Sidebar'; import TopBar from './components/TopBar'; type Page = 'dashboard' | 'send' | 'history' | 'voice' | 'security' | 'settings' | 'contacts' | 'scan'; type AppState = 'loading' | 'onboarding' | 'locked' | 'unlocked'; function AppContent() { const [appState, setAppState] = useState('loading'); const [currentPage, setCurrentPage] = useState('dashboard'); const [publicKey, setPublicKey] = useState(null); const [balance, setBalance] = useState({ sol: 0, usdt: 0 }); const [aiStatus, setAiStatus] = useState(null); const { addToast } = useToast(); useEffect(() => { init(); }, []); useEffect(() => { if (window.solvox) return window.solvox.on.locked(() => setAppState('locked')); }, []); const init = async () => { try { if (!window.solvox) { setAppState('unlocked'); return; } const exists = await window.solvox.wallet.exists(); if (!exists) { setAppState('onboarding'); return; } const unlocked = await window.solvox.wallet.isUnlocked(); setAppState(unlocked ? 'unlocked' : 'locked'); if (unlocked) { setPublicKey(await window.solvox.wallet.getPublicKey()); refreshBalance(); } } catch { setAppState('onboarding'); } }; const refreshBalance = async () => { try { if (!window.solvox) return; const r = await window.solvox.wallet.getBalance(); if (r.success) setBalance({ sol: r.sol || 0, usdt: r.usdt || 0 }); } catch {} }; const handleUnlock = (pk: string) => { setPublicKey(pk); setAppState('unlocked'); refreshBalance(); addToast({ type: 'success', title: 'Wallet unlocked' }); if (window.solvox) window.solvox.ai.initialize().then(r => { if (r.success) window.solvox.ai.getStatus().then(setAiStatus); }); }; const handleLock = async () => { if (window.solvox) await window.solvox.wallet.lock(); setAppState('locked'); }; if (appState === 'loading') return ; if (appState === 'onboarding') return { setPublicKey(pk); setAppState('unlocked'); refreshBalance(); }} />; if (appState === 'locked') return ; const pages: Record = { dashboard: , send: , history: , voice: , contacts: , scan: , security: , settings: , }; return (
{pages[currentPage]}
); } export default function App() { return ; } function Loading() { return (
SV
SolVox
Initializing local AI engine…
Powered by QVAC SDK · 100% Local AI
); }