import React from 'react'; import { Box, Text } from 'ink'; import type { Message } from '../../../models/types.js'; import { renderMarkdown } from '../markdown.js'; export interface MessageListProps { messages: Message[]; scrollOffset?: number; streamingContent?: string; } export function MessageList({ messages, scrollOffset = 0, streamingContent, }: MessageListProps): React.ReactElement { // Calculate visible area (approximate, Ink handles overflow) const visibleMessages = messages.slice(scrollOffset); return ( {visibleMessages.length === 0 && !streamingContent ? ( No messages yet. Start typing to chat with Flynn. ) : ( <> {visibleMessages.map((message, index) => ( {message.role === 'user' ? 'You:' : 'Flynn:'} {message.role === 'assistant' ? renderMarkdown(message.content) : message.content} ))} {streamingContent && ( Flynn: {streamingContent} | )} )} {messages.length > 0 && scrollOffset > 0 && ( {scrollOffset} more above )} ); }