import { useEffect, useState } from "react" import { Command as CommandIcon, Moon, Sun, ChevronLeft, ChevronRight, Cpu } from "lucide-react" import { NAV, type ViewId } from "@/nav" import { CommandPalette } from "@/components/CommandPalette" import { DashboardView } from "@/views/DashboardView" import { ModelsView } from "@/views/ModelsView" import { SystemView } from "@/views/SystemView" import { ConnectView } from "@/views/ConnectView" import { MemoryView } from "@/views/MemoryView" import { AgentView } from "@/views/AgentView" import { Placeholder } from "@/views/Placeholder" import { SystemDrawer } from "@/components/SystemDrawer" import { api, type Health, type UpdatesResp } from "@/lib/api" import { cn } from "@/lib/utils" export default function App() { const [view, setView] = useState("dashboard") const [health, setHealth] = useState(null) const [dark, setDark] = useState(() => localStorage.getItem("mc_theme") !== "light") const [sidebarCollapsed, setSidebarCollapsed] = useState(() => localStorage.getItem("mc_sidebar_collapsed") === "true") const [updates, setUpdates] = useState(null) const [drawerOpen, setDrawerOpen] = useState(false) useEffect(() => { const load = () => api("/api/health").then(setHealth).catch(() => setHealth(null)) load() const t = setInterval(load, 10000) return () => clearInterval(t) }, []) useEffect(() => { const loadUpdates = () => api("/api/maintenance/updates").then(setUpdates).catch(() => {}) loadUpdates() const t = setInterval(loadUpdates, 20000) return () => clearInterval(t) }, []) useEffect(() => { document.documentElement.classList.toggle("dark", dark) localStorage.setItem("mc_theme", dark ? "dark" : "light") }, [dark]) useEffect(() => { const handleOpen = () => setDrawerOpen(true) window.addEventListener("open-system-drawer", handleOpen) return () => window.removeEventListener("open-system-drawer", handleOpen) }, []) const active = NAV.find((n) => n.id === view)! const totalUpdates = updates ? (updates.os + updates.engine + updates.models) : 0 return (
{/* Background Aurora Ambient Effects */}
setDrawerOpen(false)} /> {/* Sidebar */} {/* Main */}
{active.hint}
Hilfe
{view === "dashboard" && } {view === "models" && } {view === "system" && } {view === "connect" && } {view === "memory" && } {view === "agent" && } {!["dashboard", "models", "system", "connect", "memory", "agent"].includes(view) && ( )}
) }