import { useState, useRef, useEffect } from 'react' function RenameModal({ current, onSave, onClose }) { const [val, setVal] = useState(current) return (
e.target === e.currentTarget && onClose()}>
Rename Chat
setVal(e.target.value)} onKeyDown={e => e.key === 'Enter' && onSave(val)} autoFocus maxLength={80} />
) } export default function TopBar({ onToggleSidebar, sessionTitle, user, onRename, onLogin, onLogout, onFeedback, onSettings, theme, onTheme, currentSessionId, }) { const [dropOpen, setDropOpen] = useState(false) const [renaming, setRenaming] = useState(false) const dropRef = useRef(null) useEffect(() => { const h = e => { if (dropRef.current && !dropRef.current.contains(e.target)) setDropOpen(false) } document.addEventListener('mousedown', h) return () => document.removeEventListener('mousedown', h) }, []) const cycleTheme = () => onTheme(theme === 'dark' ? 'light' : 'dark') const initial = user ? (user.username[0] || 'U').toUpperCase() : '?' return ( <>
{/* Sidebar toggle */} {sessionTitle} {user && currentSessionId && ( )}
{/* Theme toggle */} {user ? (
{dropOpen && (
{user.username}
Free Plan
)}
) : ( )}
{renaming && ( { onRename(t); setRenaming(false) }} onClose={() => setRenaming(false)} /> )} ) }