import { Activity, Archive, Folder, FolderPlus, MessageSquare, Plus, RefreshCw, Search, X, PanelLeftClose } from 'lucide-react'; import type { TFunction } from 'i18next'; import { Button, Input, Tooltip } from '../../../../shared/view/ui'; import { IS_PLATFORM } from '../../../../constants/config'; import { cn } from '../../../../lib/utils'; import type { SidebarSearchMode } from '../../types/types'; import GitHubStarBadge from './GitHubStarBadge'; const MOD_KEY = typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.platform) ? '⌘' : 'Ctrl'; type SidebarHeaderProps = { isPWA: boolean; isMobile: boolean; isLoading: boolean; projectsCount: number; runningSessionsCount: number; archivedSessionsCount: number; isArchivedSessionsLoading: boolean; searchFilter: string; onSearchFilterChange: (value: string) => void; onClearSearchFilter: () => void; searchMode: SidebarSearchMode; onSearchModeChange: (mode: SidebarSearchMode) => void; onRefresh: () => void; isRefreshing: boolean; onCreateProject: () => void; onCollapseSidebar: () => void; t: TFunction; }; export default function SidebarHeader({ isPWA, isMobile, isLoading, projectsCount, runningSessionsCount, archivedSessionsCount, isArchivedSessionsLoading, searchFilter, onSearchFilterChange, onClearSearchFilter, searchMode, onSearchModeChange, onRefresh, isRefreshing, onCreateProject, onCollapseSidebar, t, }: SidebarHeaderProps) { const showSearchTools = (projectsCount > 0 || runningSessionsCount > 0 || archivedSessionsCount > 0 || isArchivedSessionsLoading) && !isLoading; const searchPlaceholder = searchMode === 'conversations' ? t('search.conversationsPlaceholder') : searchMode === 'archived' ? t('search.archivedPlaceholder', 'Search archived sessions...') : searchMode === 'running' ? t('search.runningPlaceholder', 'Search running sessions...') : t('projects.searchPlaceholder'); const runningBadgeText = runningSessionsCount > 99 ? '99+' : String(runningSessionsCount); const LogoBlock = () => (

{t('app.title')}

); return (
{/* Desktop header */}
{IS_PLATFORM ? ( ) : ( )}
{/* Search bar */} {showSearchTools && (
{/* Search mode toggle */}
onSearchFilterChange(event.target.value)} className="nav-search-input h-9 rounded-xl border-0 pl-9 pr-14 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0" /> {searchFilter ? ( ) : ( {MOD_KEY} K )}
)}
{/* Desktop divider */}
{/* Mobile header */}
{IS_PLATFORM ? ( ) : ( )}
{/* Mobile search */} {showSearchTools && (
onSearchFilterChange(event.target.value)} className="nav-search-input h-10 rounded-xl border-0 pl-10 pr-9 text-sm transition-all duration-200 placeholder:text-muted-foreground/40 focus-visible:ring-0 focus-visible:ring-offset-0" /> {searchFilter && ( )}
)}
{/* Mobile divider */}
); }