Python 51.6%
TypeScript 46.7%
CSS 1.7%
1import type { Metadata } from "next";2import { apiSafe, type RidingListItem } from "@/lib/api";3import { RidingsGrid } from "@/components/ridings-grid";4import { Empty } from "@/components/ui";56export const metadata: Metadata = { title: "Circonscriptions — 127 fiches, probabilités de victoire", description: "Les 127 circonscriptions du Québec : favori, probabilité de victoire par parti, sortant·e, région, avec recherche instantanée." };7export const revalidate = 60;89export default async function Page({ searchParams }: { searchParams: Promise<{ tri?: string }> }) {10 const sp = await searchParams;11 const data = await apiSafe<{ ridings: RidingListItem[]; regions: { id: string; name: string }[] }>("/api/ridings");12 if (!data) return <Empty title="Circonscriptions indisponibles" />;13 return (14 <div className="space-y-6">15 <div>16 <div className="eyebrow">Circonscriptions · {data.ridings.length}</div>17 <h1 className="display text-[40px] md:text-[56px] mt-3">127 circonscriptions</h1>18 <p className="text-ink-2 mt-3 max-w-2xl text-[15px] leading-relaxed">Les pourcentages sont des <b>probabilités de victoire</b> issues des simulations, pas des intentions de vote. Nouvelle carte 2026 : Bellefeuille et Marie-Lacoste-Gérin-Lajoie s'ajoutent, 39 circonscriptions sont modifiées.</p>19 </div>20 <RidingsGrid ridings={data.ridings} regions={data.regions} initialSort={sp.tri === "serre" ? "serre" : "nom"} />21 </div>22 );23}24