import { MessageSquare, Terminal, Folder, GitBranch, ClipboardCheck, MonitorCog, MonitorPlay, type LucideIcon } from 'lucide-react'; import type { Dispatch, SetStateAction } from 'react'; import { useTranslation } from 'react-i18next'; import { Tooltip, PillBar, Pill } from '../../../../shared/view/ui'; import type { AppTab } from '../../../../types/app'; import { usePlugins } from '../../../../contexts/PluginsContext'; import PluginIcon from '../../../plugins/view/PluginIcon'; type MainContentTabSwitcherProps = { activeTab: AppTab; setActiveTab: Dispatch>; shouldShowTasksTab: boolean; shouldShowBrowserTab: boolean; shouldShowComputerTab: boolean; }; type BuiltInTab = { kind: 'builtin'; id: AppTab; labelKey: string; icon: LucideIcon; }; type PluginTab = { kind: 'plugin'; id: AppTab; label: string; pluginName: string; iconFile: string; }; type TabDefinition = BuiltInTab | PluginTab; const BASE_TABS: BuiltInTab[] = [ { kind: 'builtin', id: 'chat', labelKey: 'tabs.chat', icon: MessageSquare }, { kind: 'builtin', id: 'shell', labelKey: 'tabs.shell', icon: Terminal }, { kind: 'builtin', id: 'files', labelKey: 'tabs.files', icon: Folder }, { kind: 'builtin', id: 'git', labelKey: 'tabs.git', icon: GitBranch }, ]; const BROWSER_TAB: BuiltInTab = { kind: 'builtin', id: 'browser', labelKey: 'tabs.browser', icon: MonitorPlay, }; const COMPUTER_TAB: BuiltInTab = { kind: 'builtin', id: 'computer', labelKey: 'tabs.computer', icon: MonitorCog, }; const TASKS_TAB: BuiltInTab = { kind: 'builtin', id: 'tasks', labelKey: 'tabs.tasks', icon: ClipboardCheck, }; export default function MainContentTabSwitcher({ activeTab, setActiveTab, shouldShowTasksTab, shouldShowBrowserTab, shouldShowComputerTab, }: MainContentTabSwitcherProps) { const { t } = useTranslation(); const { plugins } = usePlugins(); const builtInTabs: BuiltInTab[] = [ ...BASE_TABS, ...(shouldShowBrowserTab ? [BROWSER_TAB] : []), ...(shouldShowComputerTab ? [COMPUTER_TAB] : []), ...(shouldShowTasksTab ? [TASKS_TAB] : []), ]; const pluginTabs: PluginTab[] = plugins .filter((p) => p.enabled) .map((p) => ({ kind: 'plugin', id: `plugin:${p.name}` as AppTab, label: p.displayName, pluginName: p.name, iconFile: p.icon, })); const tabs: TabDefinition[] = [...builtInTabs, ...pluginTabs]; return ( {tabs.map((tab) => { const isActive = tab.id === activeTab; const displayLabel = tab.kind === 'builtin' ? t(tab.labelKey) : tab.label; return ( setActiveTab(tab.id)} className="px-2.5 py-[5px]" > {tab.kind === 'builtin' ? ( ) : ( )} {displayLabel} ); })} ); }