import { useGpu } from './hooks/useGpu'; import { useCurve } from './hooks/useCurve'; import { useMonitor } from './hooks/useMonitor'; import { StatusBar } from './components/Monitor/StatusBar'; import { LiveMonitor } from './components/Monitor/LiveMonitor'; import { CurveEditor } from './components/CurveEditor/CurveEditor'; import { PointTable } from './components/PointTable/PointTable'; import { PerformancePanel } from './components/Limits/PerformancePanel'; import { PerformanceMonitor } from './components/Monitor/PerformanceMonitor'; import { ProfilePanel } from './components/Profiles/ProfilePanel'; import { api } from './api/client'; import { useCurveStore } from './store/curveStore'; import { Toaster } from 'sonner'; import { Loader, ChevronDown } from 'lucide-react'; import { useState, useRef, useEffect } from 'react'; export default function App() { const gpuInfo = useGpu(); const { curve, wsStatus: curveWsStatus } = useCurve(); const { monitor, monitorHistory, wsStatus: monitorWsStatus } = useMonitor(); const { setCurve, activeProfile, setActiveProfile, selectedGpuIndex } = useCurveStore(); const [activeTab, setActiveTab] = useState<'curve' | 'performance'>('curve'); const [activeDomain, setActiveDomain] = useState<'gpu' | 'memory'>('gpu'); const [isProfileOpen, setIsProfileOpen] = useState(false); const profileRef = useRef(null); const currentVoltageMv = monitor?.voltage_mv ?? null; function handleRefresh() { api.curve(selectedGpuIndex).then(setCurve).catch(console.error); } useEffect(() => { function handleClickOutside(event: MouseEvent) { if (profileRef.current && !profileRef.current.contains(event.target as Node)) { setIsProfileOpen(false); } } document.addEventListener("mousedown", handleClickOutside); // Fetch initial active profile api.profiles(selectedGpuIndex).then(data => setActiveProfile(data.active)).catch(console.error); return () => document.removeEventListener("mousedown", handleClickOutside); }, [selectedGpuIndex, setActiveProfile]); // Worst connection status wins const wsStatus = monitorWsStatus === 'disconnected' || curveWsStatus === 'disconnected' ? 'disconnected' : monitorWsStatus === 'connecting' || curveWsStatus === 'connecting' ? 'connecting' : 'connected'; return (
{wsStatus !== 'connected' && (
{wsStatus === 'connecting' ? 'Reconnecting to backend...' : 'Connection lost. Retrying...'}
)}
{/* Tab Header and Profile Selector */}
{isProfileOpen && (
)}
{/* Main content area */}
{activeTab === 'curve' ? ( <>
{curve ? ( ) : (
Loading curve…
)}
{curve && (
p.domain === activeDomain)} currentVoltageMv={activeDomain === 'gpu' ? currentVoltageMv : null} readOnly={activeDomain === 'memory'} />
)} ) : (
)}
); }