import React from 'react'; import { createPortal } from 'react-dom'; import { X, FileText, Copy, Check, Star, Hash } from 'lucide-react'; import { useLanguage } from '../contexts/LanguageContext'; import { ChatSource } from '../services/chatService'; import { useToast } from '../contexts/ToastContext'; import { copyToClipboard } from '../utils/clipboard'; interface SourcePreviewDrawerProps { isOpen: boolean; onClose: () => void; source: ChatSource | null; onOpenFile?: (source: ChatSource) => void; } export const SourcePreviewDrawer: React.FC = ({ isOpen, onClose, source, onOpenFile }) => { const { t } = useLanguage(); const { showSuccess } = useToast(); const [isCopied, setIsCopied] = React.useState(false); React.useEffect(() => { if (isOpen) { setIsCopied(false); } }, [isOpen, source]); if (!isOpen || !source) return null; const handleCopy = async () => { const success = await copyToClipboard(source.content); if (success) { setIsCopied(true); showSuccess(t('copySuccess')); setTimeout(() => setIsCopied(false), 2000); } }; return createPortal( <>
{/* Header */}
{source.fileId ? ( ) : (

{source.fileName}

)} {t('sourcePreview')}
{/* Content */}
{/* Meta Info */}
{(source.score * 100).toFixed(1)}% {t('matchScore')}
#{source.chunkIndex + 1}
{/* Main Content */}
{source.content}
, document.body ); };