/** * Trouve-KA — un résultat de recherche (favicon, titre, extrait, vignette, pastilles) * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai */ import { Favicon } from "@/components/favicon"; import { ResultThumbnail } from "@/components/result-thumbnail"; import { Snippet } from "@/components/snippet"; import { Badge } from "@/components/ui/badge"; import { formatDate } from "@/lib/format"; import type { SearchResult } from "@/lib/types"; function badgeVariant( label: string, ): "quebec" | "government" | "news" | "education" | "default" { if (label === "Québec") return "quebec"; if (label === "Gouvernement") return "government"; if (label === "Actualités") return "news"; if (label === "Éducation") return "education"; return "default"; } /** Intensité québécoise de la pastille (◆ / ◆◆ / ◆◆◆), sobre et graduée. */ function quebecMarks(score: number): string { if (score >= 0.85) return "◆◆◆"; if (score >= 0.65) return "◆◆"; return "◆"; } interface ResultItemProps { result: SearchResult; } export function ResultItem({ result }: ResultItemProps) { const publishedAt = result.published_at ? formatDate(result.published_at) : ""; const hasBadges = Boolean(result.badges && result.badges.length > 0); return (
{result.display_url || result.domain}

{result.title || result.url}

{publishedAt || hasBadges ? (
{result.badges?.map((badge, index) => ( = 0.45 ? `Score Québec ${Math.round(result.quebec_score * 100)} %` : undefined } className={index === 0 ? "-rotate-1 hover:rotate-0" : undefined} > {badge === "Québec" ? ( ) : null} {badge} ))} {publishedAt ? ( {publishedAt} ) : null}
) : null}
{result.image ? ( ) : null}
); }