import React, { useEffect, useState } from "react"; import { motion } from "framer-motion"; import { Circle, FileText, Settings, ExternalLink, BarChart3, Network, Info, Bot } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Popover } from "@/components/ui/popover"; import { LanguageSwitcher } from "@/components/LanguageSwitcher"; import { ThemeSwitcher } from "@/components/ThemeSwitcher"; import { useTranslation } from "@/hooks/useTranslation"; import { api, type ClaudeVersionStatus } from "@/lib/api"; import { cn } from "@/lib/utils"; interface TopbarProps { /** * Callback when CLAUDE.md is clicked */ onClaudeClick: () => void; /** * Callback when Settings is clicked */ onSettingsClick: () => void; /** * Callback when Usage Dashboard is clicked */ onUsageClick: () => void; /** * Callback when MCP is clicked */ onMCPClick: () => void; /** * Callback when Info is clicked */ onInfoClick: () => void; /** * Callback when Agents is clicked */ onAgentsClick?: () => void; /** * Optional className for styling */ className?: string; } /** * Topbar component with status indicator and navigation buttons * * @example * setView('editor')} * onSettingsClick={() => setView('settings')} * onUsageClick={() => setView('usage-dashboard')} * onMCPClick={() => setView('mcp')} * /> */ export const Topbar: React.FC = ({ onClaudeClick, onSettingsClick, onUsageClick, onMCPClick, onInfoClick, onAgentsClick, className, }) => { const { t } = useTranslation(); const [versionStatus, setVersionStatus] = useState(null); const [checking, setChecking] = useState(true); // Check Claude version on mount useEffect(() => { checkVersion(); }, []); const checkVersion = async () => { try { setChecking(true); const status = await api.checkClaudeVersion(); setVersionStatus(status); // If Claude is not installed, prompt the selection/install dialog if (!status.is_installed) { // Emit an event that can be caught by the parent window.dispatchEvent(new CustomEvent('claude-not-found')); } } catch (err) { console.error("Failed to check Claude version:", err); setVersionStatus({ is_installed: false, output: "Failed to check version", }); } finally { setChecking(false); } }; const StatusIndicator = () => { if (checking) { return (
Checking...
); } if (!versionStatus) return null; const statusContent = ( ); if (!versionStatus.is_installed) { return (

{t('messages.claudeCodeNotFound')}

                  {versionStatus.output}
                
{t('messages.installClaudeCode')} } align="start" /> ); } return statusContent; }; return ( {/* Status Indicator */} {/* Action Buttons */}
{onAgentsClick && ( )} {/* Language Switcher */} {/* Theme Switcher */}
); };