import { Task } from '@/lib/types'; import { formatDistanceToNow } from 'date-fns'; import { fr } from 'date-fns/locale'; import { Card } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; interface TaskCardProps { task: Task; onDelete?: (taskId: string) => Promise; } export function TaskCard({ task, onDelete }: TaskCardProps) { const handleDelete = async (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (onDelete) { await onDelete(task.id); } }; // 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(); return ( {/* Header tech avec titre et status */}
{emojis.length > 0 && (
{emojis.slice(0, 2).map((emoji, index) => ( {emoji} ))}
)}

{titleWithoutEmojis}

{/* Bouton de suppression discret */} {onDelete && ( )} {/* Indicateur de priorité tech */}
{/* Description tech */} {task.description && (

{task.description}

)} {/* Tags avec composant Badge */} {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.source !== 'manual' && task.source && ( {task.source} )} {task.completedAt && ( ✓ DONE )}
); }