import { Clipboard, MessageSquare, MoreVertical, Settings, Trash } from 'lucide-react' import { useState } from 'react' import { toast } from 'sonner' import { copyToClipboard, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from 'ui' import { ExplorerToolbar, ExplorerToolbarAction, ExplorerToolbarActions, ExplorerToolbarIcon, ExplorerToolbarTitle, } from './ExplorerToolbar' import { useExplorerDeleteItem } from '@/components/layouts/ExplorerLayout/ExplorerProvider' import { AIAssistantMetadataWarning } from '@/components/ui/AIAssistantPanel/AIAssistantMetadataWarning' import type { AssistantChatHeaderProps } from '@/components/ui/AIAssistantPanel/AssistantChat' import { ShortcutPills } from '@/components/ui/ShortcutTooltip' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { SHORTCUT_DEFINITIONS, SHORTCUT_IDS } from '@/state/shortcuts/registry' import { useShortcut } from '@/state/shortcuts/useShortcut' interface ExplorerChatToolbarProps extends AssistantChatHeaderProps { chatId: string shortcutsEnabled: boolean } export const ExplorerChatToolbar = ({ chatId, shortcutsEnabled, isChatLoading, showMetadataWarning, updatedOptInSinceMCP, aiOptInLevel, }: ExplorerChatToolbarProps) => { const snap = useAiAssistantStateSnapshot() const chat = snap.chats[chatId] const [isOptInModalOpen, setIsOptInModalOpen] = useState(false) const { onSelectDelete } = useExplorerDeleteItem() const handleCopyChatId = () => { copyToClipboard(chatId, () => toast.success(`Copied chat ID for ${chat?.name}`)) } const handleSaveName = (name: string) => { if (name.trim()) snap.renameChat(chatId, name.trim()) } useShortcut(SHORTCUT_IDS.AI_ASSISTANT_COPY_CHAT_ID, handleCopyChatId, { enabled: shortcutsEnabled && !isChatLoading, }) useShortcut(SHORTCUT_IDS.AI_ASSISTANT_OPEN_PERMISSIONS, () => setIsOptInModalOpen(true), { enabled: shortcutsEnabled && !isChatLoading, }) return (
{chat?.name ?? ''} } disabled={isChatLoading} />
Copy chat ID
setIsOptInModalOpen(true)} >
Permission settings
onSelectDelete({ id: chatId, type: 'chat', name: chat?.name ?? '' })} > Delete chat
) }