"use client"; import React from "react"; import { ChatSection, ChatHandler, ChatCanvas, ChatMessages, useChatUI, ChatMessage, Message, getAnnotationData, } from "@llamaindex/chat-ui"; import { Document } from "@/hooks/use-documents"; import { CustomChatInput } from "@/components/chat_v2/ChatInputGroup"; import { ResearchMode } from "@/components/chat"; import TerminalDisplay from "@/components/chat_v2/ChatTerminal"; import ChatSourcesDisplay from "@/components/chat_v2/ChatSources"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { ExternalLink } from "lucide-react"; interface ChatInterfaceProps { handler: ChatHandler; onDocumentSelectionChange?: (documents: Document[]) => void; selectedDocuments?: Document[]; onConnectorSelectionChange?: (connectorTypes: string[]) => void; selectedConnectors?: string[]; searchMode?: "DOCUMENTS" | "CHUNKS"; onSearchModeChange?: (mode: "DOCUMENTS" | "CHUNKS") => void; researchMode?: ResearchMode; onResearchModeChange?: (mode: ResearchMode) => void; } const CitationDisplay: React.FC<{index: number, node: any}> = ({index, node}) => { const truncateText = (text: string, maxLength: number = 200) => { if (text.length <= maxLength) return text; return text.substring(0, maxLength) + '...'; }; const handleUrlClick = (e: React.MouseEvent, url: string) => { e.preventDefault(); e.stopPropagation(); window.open(url, '_blank', 'noopener,noreferrer'); }; return ( {index + 1} {/* External Link Button - Top Right */} {node?.url && ( )} {/* Heading */}
{node?.metadata?.group_name || 'Source'}
{/* Source */}
{node?.metadata?.title || 'Untitled'}
{/* Body */}
{truncateText(node?.text || 'No content available')}
); } function ChatMessageDisplay({ message, isLast, }: { message: Message; isLast: boolean; }) { return ( {message.role === "assistant" ? (
) : ( )}
); } function ChatMessagesDisplay() { const { messages } = useChatUI(); return ( {messages.map((message, index) => ( ))} ); } export default function ChatInterface({ handler, onDocumentSelectionChange, selectedDocuments = [], onConnectorSelectionChange, selectedConnectors = [], searchMode, onSearchModeChange, researchMode, onResearchModeChange, }: ChatInterfaceProps) { return (
); }