import { ArrowUp, Loader2, MessageSquareText, Trash2, X } from 'lucide-react' import clsx from 'clsx' import DetailConversation from './ChatHistoryDetail' import { ListModeIcon, MergeModeIcon } from './HistoryModeIcons' import { formatDateTime, previewText, statusTone } from './chatHistoryUtils' function ViewModeToggle({ t, viewMode, setViewMode, mobile = false }) { const size = mobile ? 'h-9 w-10' : 'h-9 w-12' return (
) } export function ChatHistoryListPane({ items, selectedItem, deletingId, t, lang, onSelectItem, onDeleteItem }) { return (
{t('chatHistory.listTitle')}
{items.length}
{!items.length && (
{t('chatHistory.emptyTitle')}
{t('chatHistory.emptyDesc')}
)} {items.map(item => (
{previewText(item) || t('chatHistory.noPreview')}
{formatDateTime(item.completed_at || item.updated_at || item.created_at, lang)}
))} ) } export function DesktopDetailPane({ selectedSummary, selectedItem, t, lang, viewMode, setViewMode, detailScrollRef, assistantStartRef, onMessage }) { return (
{t('chatHistory.detailTitle')}
{selectedSummary ? formatDateTime(selectedSummary.completed_at || selectedSummary.updated_at || selectedSummary.created_at, lang) : t('chatHistory.selectPrompt')}
{selectedSummary && ( {t(`chatHistory.status.${selectedSummary.status || 'streaming'}`)} )}
{!selectedItem && (
{t('chatHistory.selectPrompt')}
)} {selectedItem && ( )}
) } export function MobileDetailModal({ open, visible, origin, selectedItem, t, lang, viewMode, setViewMode, detailScrollRef, assistantStartRef, onClose }) { if (!open || !selectedItem) return null return (
event.stopPropagation()} className={clsx( 'w-full h-full rounded-2xl border border-border bg-card shadow-2xl overflow-hidden flex flex-col transition-transform duration-200 ease-out', visible ? 'scale-100' : 'scale-90' )} style={{ transformOrigin: `${origin.x}% ${origin.y}%` }} >
{t('chatHistory.detailTitle')}
{formatDateTime(selectedItem.completed_at || selectedItem.updated_at || selectedItem.created_at, lang)}
) } export function ConfirmClearDialog({ open, t, onCancel, onConfirm }) { if (!open) return null return (
{t('chatHistory.confirmClearTitle')}
{t('chatHistory.confirmClearDesc')}
) }