'use client'; import { AnimatePresence } from 'motion/react'; import { type AgentState, type ReceivedMessage } from '@livekit/components-react'; import { AgentChatIndicator } from '@/components/agents-ui/agent-chat-indicator'; import { Conversation, ConversationContent, ConversationScrollButton, } from '@/components/ai-elements/conversation'; import { Message, MessageContent, MessageResponse } from '@/components/ai-elements/message'; /** * Props for the AgentChatTranscript component. */ export interface AgentChatTranscriptProps { /** * The current state of the agent. When 'thinking', displays a loading indicator. */ agentState?: AgentState; /** * Array of messages to display in the transcript. * @defaultValue [] */ messages?: ReceivedMessage[]; /** * Additional CSS class names to apply to the conversation container. */ className?: string; } /** * A chat transcript component that displays a conversation between the user and agent. * Shows messages with timestamps and origin indicators, plus a thinking indicator * when the agent is processing. * * @extends ComponentProps<'div'> * * @example * ```tsx * * ``` */ export function AgentChatTranscript({ agentState, messages = [], className, ...props }: AgentChatTranscriptProps) { return ( {messages.map((receivedMessage) => { const { id, timestamp, from, message } = receivedMessage; const locale = navigator?.language ?? 'en-US'; const messageOrigin = from?.isLocal ? 'user' : 'assistant'; const time = new Date(timestamp); const title = time.toLocaleTimeString(locale, { timeStyle: 'full' }); return ( {message} ); })} {agentState === 'thinking' && } ); }