Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" import { HistoryIcon, MapIcon, PlusIcon, SettingsIcon } from "lucide-react" import { useMemo } from "react" import { TaskServiceClient } from "@/services/grpc-client" import { useExtensionState } from "../../context/ExtensionStateContext" import HeroTooltip from "../common/HeroTooltip" // Custom MCP Server Icon component using VSCode codicon const McpServerIcon = ({ className, size }: { className?: string; size?: number }) => ( <span className={`codicon codicon-server flex items-center ${className || ""}`} style={{ fontSize: size ? `${size}px` : "12.5px", marginBottom: "1px" }} /> ) export const Navbar = () => { const { navigateToHistory, navigateToSettings, navigateToMcp, navigateToMap, navigateToChat } = useExtensionState() const SETTINGS_TABS = useMemo( () => [ { id: "chat", name: "Chat", tooltip: "New Task", icon: PlusIcon, navigate: () => { // Close the current task, then navigate to the chat view TaskServiceClient.clearTask({}) .catch((error) => { console.error("Failed to clear task:", error) }) .finally(() => navigateToChat()) }, }, { id: "mcp", name: "MCP", tooltip: "MCP Servers", icon: McpServerIcon, navigate: navigateToMcp, }, { id: "map", name: "Map", tooltip: "Map View", icon: MapIcon, navigate: navigateToMap, }, { id: "history", name: "History", tooltip: "History", icon: HistoryIcon, navigate: navigateToHistory, }, { id: "settings", name: "Settings", tooltip: "Settings", icon: SettingsIcon, navigate: navigateToSettings, }, ], [navigateToChat, navigateToHistory, navigateToMap, navigateToMcp, navigateToSettings], ) return ( <nav className="flex-none inline-flex justify-end bg-transparent gap-2 mb-1 z-10 border-none items-center mr-4!" id="aihydro-navbar-container" style={{ gap: "4px" }}> {SETTINGS_TABS.map((tab) => ( <HeroTooltip content={tab.tooltip} key={`navbar-tooltip-${tab.id}`} placement="bottom"> <VSCodeButton appearance="icon" aria-label={tab.tooltip} data-testid={`tab-${tab.id}`} key={`navbar-button-${tab.id}`} onClick={() => tab.navigate()} style={{ padding: "0px", height: "20px" }}> <div className="flex items-center gap-1 text-xs whitespace-nowrap min-w-0 w-full"> <tab.icon className="text-[var(--vscode-foreground)]" size={18} strokeWidth={1} /> </div> </VSCodeButton> </HeroTooltip> ))} </nav> ) } |