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 => (
))}
)
}
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')}
detailScrollRef.current?.scrollTo({ top: 0, behavior: 'smooth' })}
className="h-8 w-8 rounded-lg border border-border bg-background text-muted-foreground hover:text-foreground hover:bg-secondary/70 flex items-center justify-center"
title={t('chatHistory.backToTop')}
>
{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)}
detailScrollRef.current?.scrollTo({ top: 0, behavior: 'smooth' })}
className="h-9 w-9 rounded-lg border border-border bg-background text-muted-foreground hover:text-foreground hover:bg-secondary/70 flex items-center justify-center"
title={t('chatHistory.backToTop')}
>
)
}
export function ConfirmClearDialog({ open, t, onCancel, onConfirm }) {
if (!open) return null
return (
{t('chatHistory.confirmClearTitle')}
{t('chatHistory.confirmClearDesc')}
{t('actions.cancel')}
{t('chatHistory.confirmClearAction')}
)
}