import { Task } from '@/lib/types'; import { formatDistanceToNow } from 'date-fns'; import { fr } from 'date-fns/locale'; interface TaskCardProps { task: Task; } export function TaskCard({ task }: TaskCardProps) { // Extraire les emojis du titre pour les afficher comme tags visuels const emojiRegex = /[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu; const emojis = task.title.match(emojiRegex) || []; const titleWithoutEmojis = task.title.replace(emojiRegex, '').trim(); // Couleur de priorité const priorityColors = { low: 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300', medium: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300', high: 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300', urgent: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300' }; // Couleur de source const sourceColors = { reminders: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300', jira: 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300' }; return (
{/* Header tech avec titre et status */}
{emojis.length > 0 && (
{emojis.slice(0, 2).map((emoji, index) => ( {emoji} ))}
)}

{titleWithoutEmojis}

{/* Indicateur de priorité tech */}
{/* Description tech */} {task.description && (

{task.description}

)} {/* Tags tech style */} {task.tags && task.tags.length > 0 && (
{task.tags.slice(0, 3).map((tag, index) => ( {tag} ))} {task.tags.length > 3 && ( +{task.tags.length - 3} )}
)} {/* Footer tech avec séparateur néon */}
{task.dueDate ? ( {formatDistanceToNow(new Date(task.dueDate), { addSuffix: true, locale: fr })} ) : ( --:-- )} {task.completedAt && ( ✓ DONE )}
); }