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)}
/>
)}
>
)
}