'use client'; import { Memory } from '@/types/memory'; import { getCategoryColor, getTypeColor } from '@/lib/category-colors'; function relativeTime(dateStr: string): string { const diff = Date.now() - new Date(dateStr).getTime(); const mins = Math.floor(diff / 60000); if (mins < 1) return 'now'; if (mins < 60) return `${mins}m ago`; const hrs = Math.floor(mins / 60); if (hrs < 24) return `${hrs}h ago`; const days = Math.floor(hrs / 24); if (days < 7) return `${days}d ago`; const weeks = Math.floor(days / 7); return `${weeks}w ago`; } interface MemoryCardProps { memory: Memory; isSelected: boolean; onSelect: (m: Memory) => void; isChecked?: boolean; onCheck?: (id: number, checked: boolean) => void; } export function MemoryCard({ memory, isSelected, onSelect, isChecked, onCheck }: MemoryCardProps) { const catColor = getCategoryColor(memory.category); const typeColor = getTypeColor(memory.type); return (
onSelect(memory)} className={`bg-slate-900 border rounded-lg p-3 hover:border-slate-600 cursor-pointer transition-colors relative ${ isSelected ? 'border-cyan-500' : 'border-slate-800' }`} > {/* Salience bar */}
{/* Checkbox */} {onCheck && ( { e.stopPropagation(); onCheck(memory.id, e.target.checked); }} onClick={(e) => e.stopPropagation()} className="absolute top-3 right-3 w-4 h-4 accent-blue-500" /> )} {/* Title */}

{memory.title}

{/* Badges */}
{memory.category} {memory.type.replace('_', '-')}
{/* Content preview */}

{memory.content}

{/* Tags */} {memory.tags.length > 0 && (
{memory.tags.slice(0, 3).map((tag) => ( {tag} ))} {memory.tags.length > 3 && ( +{memory.tags.length - 3} more )}
)} {/* Footer */}
Created {relativeTime(memory.createdAt)} Accessed {relativeTime(memory.lastAccessed)}
); }