import type { Metadata } from "next"; import Link from "next/link"; import { apiSafe, type Party } from "@/lib/api"; import { PartyLogo } from "@/components/party"; import { Empty } from "@/components/ui"; import { dateFr, int, pct, prob } from "@/lib/format"; import { partyVar } from "@/lib/parties"; export const metadata: Metadata = { title: "Partis — chefs, candidatures, projections, documents", description: "Les cinq principaux partis de l'élection québécoise 2026 : chef·fe (registre DGEQ), candidatures officielles, sièges projetés, documents et propositions." }; export const revalidate = 120; export default async function Page() { const data = await apiSafe<{ parties: Party[] }>("/api/parties"); if (!data) return ; return (
Partis · registre officiel des partis autorisés (REPAQ)

Party Explorer

Comparateur des positions →
{data.parties.sort((a, b) => (b.forecast?.seatsMedian ?? 0) - (a.forecast?.seatsMedian ?? 0)).map((p) => (
{p.abbreviation}
{p.officialName}
{p.leader ? <>Chef·fe : {p.leader}{p.leaderSince ? · depuis {dateFr(p.leaderSince, { month: "long", year: "numeric" })} : null} : "—"}
Sièges projetés
{p.forecast?.seatsMedian ?? "—"}
{p.forecast ? `${p.forecast.seats80[0]}–${p.forecast.seats80[1]}` : ""}
Vote projeté
{p.forecast ? pct(p.forecast.voteMean, 1, "") : "—"} %
2022 : {pct(p.vote2022, 1)}
P(majorité)
{prob(p.forecast?.pMajority)}
2022 : {p.seats2022} sièges
{int(p.candidatesCount)} candidatures{p.documents} documents · {p.proposals} propositions
))}

Chef·fe et nom officiel tels qu'inscrits au registre des partis autorisés d'Élections Québec (pp_autorises.json). Logos officiels tirés des sites des partis, non modifiés.

); }