import { useState } from "react"; import { Settings, ChevronDown, User, LogOut, ExternalLink, Star, Bell, MessageSquare, Plug, Search, X } from "lucide-react"; import { Button } from "@/routes/ui/button"; import { cn } from "~/lib/utils"; import { Popover, PopoverContent, PopoverTrigger, } from "@/routes/ui/popover"; export interface SearchSpace { id: string; name: string; icon?: string; } export interface ChatHeaderProps { /** Available search spaces */ searchSpaces?: SearchSpace[]; /** Currently selected search space */ selectedSpace?: SearchSpace; /** Callback when search space is changed */ onSpaceChange?: (space: SearchSpace) => void; /** User display name */ userName?: string; /** User avatar URL */ userAvatar?: string; /** Callback when logout is clicked */ onLogout?: () => void; /** Callback when settings item is clicked */ onSettingsClick?: (item: string) => void; /** Callback when token search is triggered */ onTokenSearch?: (query: string) => void; } /** * Enhanced Chat header with branding, token search, space selector, settings, and user menu * * Features: * - Universal token search bar (works on any page) * - Search space selector dropdown * - Settings dropdown with full menu * - User avatar with logout option */ export function ChatHeader({ searchSpaces = [], selectedSpace, onSpaceChange, userName, userAvatar, onLogout, onSettingsClick, onTokenSearch, }: ChatHeaderProps) { const [spaceOpen, setSpaceOpen] = useState(false); const [settingsOpen, setSettingsOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const defaultSpaces: SearchSpace[] = [ { id: "crypto", name: "Crypto", icon: "🪙" }, { id: "general", name: "General", icon: "📚" }, { id: "research", name: "Research", icon: "🔬" }, ]; const spaces = searchSpaces.length > 0 ? searchSpaces : defaultSpaces; const currentSpace = selectedSpace || spaces[0]; const handleSearch = (e: React.FormEvent) => { e.preventDefault(); if (searchQuery.trim() && onTokenSearch) { onTokenSearch(searchQuery.trim()); } }; const handleClearSearch = () => { setSearchQuery(""); }; return (
{name || "User"}