import { useState } from "react"; import { useAppStore } from "../store/useAppStore"; import { useModeStore } from "../store/useModeStore"; import { applyTheme, readTheme, type ThemeMode } from "../lib/theme"; import type { Mode, WsStatus } from "../lib/types"; import { Tag } from "./primitives"; import { Icon, type IconName } from "./Icon"; import { AwakenBadge } from "./status"; const MODE_LABEL: Record = { chat: "对话", code: "代码", home: "家居", work: "工作", docs: "知识库", voice: "语音", vision: "视觉", agents: "子代理", settings: "设置", }; const MODE_ICON: Record = { chat: "chat", code: "terminal", home: "home", work: "folder", docs: "docs", voice: "mic", vision: "vision", agents: "agent", settings: "settings", }; const wsMeta: Record = { idle: { label: "未连接", tone: "neutral" }, connecting: { label: "连接中", tone: "warn" }, connected: { label: "实时", tone: "ok" }, reconnecting: { label: "重连中", tone: "warn" }, disconnected: { label: "已断开", tone: "err" }, }; export function TopBar(): React.ReactNode { const wsStatus = useAppStore((s) => s.wsStatus); const mood = useAppStore((s) => s.mood); const mode = useModeStore((s) => s.mode); const [theme, setTheme] = useState(readTheme); const toggleTheme = () => { const next: ThemeMode = theme === "dark" ? "light" : "dark"; applyTheme(next); setTheme(next); }; const meta = wsMeta[wsStatus]; return (
Cyrene
Cyrene · 昔涟
{MODE_LABEL[mode]}
{mood ? 心情 · {mood} : null} {meta.label}
); }