import React from 'react'; import { SimilarityBar } from './SimilarityBar'; import './style.scss'; export interface SearchResult { id?: string; text: string; model: string; similarity: number; timestamp: number; metadata?: Record; } export interface SearchResultsProps { /** Array of search results */ results: SearchResult[]; /** Whether search is in progress */ isSearching?: boolean; /** Result click handler */ onResultClick?: (result: SearchResult, index: number) => void; /** Show model info */ showModel?: boolean; /** Show timestamp */ showTimestamp?: boolean; /** Show similarity bar */ showSimilarityBar?: boolean; /** Loading message */ loadingMessage?: string; /** Empty message */ emptyMessage?: string; /** Custom className */ className?: string; } export const SearchResults: React.FC = ({ results, isSearching = false, onResultClick, showModel = true, showTimestamp = true, showSimilarityBar = true, loadingMessage = 'Searching...', emptyMessage = 'No results found', className = '' }) => { const formatTimestamp = (timestamp: number) => { return new Date(timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); }; if (isSearching) { return (

{loadingMessage}

); } if (results.length === 0) { return (

{emptyMessage}

); } return (
{results.map((result, index) => (
onResultClick?.(result, index)} role="button" tabIndex={0} >
{result.text}
{(showModel || showTimestamp) && (
{showModel && Model: {result.model}} {showModel && showTimestamp && | } {showTimestamp && Created: {formatTimestamp(result.timestamp)}}
)}
{(result.similarity * 100).toFixed(1)}%
{showSimilarityBar && ( )}
))}
); };