import { useState, useMemo } from "react"; import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, AreaChart, Area, Legend, CartesianGrid } from "recharts"; /* FRANCIRIS ANALYTICS — LE TABLEAU DE BORD DU CONCOURS */ const editions = [ { year: 2000, lieu: "Jardins de Brocéliande", type: "national", entries: 14, hybrideurs: 6, pays: 1, jury_president: "Paolo Gambassini (IT)", podium: [ { rank: 1, cultivar: "Samsara", hybrideur: "Lawrence Ransom", pays: "France", special: "La plus originale" }, { rank: 2, cultivar: "Mer du Sud", hybrideur: "Cayeux", pays: "France", special: "La plus parfumée" }, { rank: 3, cultivar: "Damoiselle", hybrideur: "Lawrence Ransom", pays: "France" }, { rank: 4, cultivar: "Claude Louis Gayrard", hybrideur: "Ransom", pays: "France" }, { rank: 5, cultivar: "Massalia", hybrideur: "Anfosso", pays: "France" }, ], prix_public: "Provençal (Cayeux)", prix_parfum: "Mer du Sud (Cayeux)", }, { year: 2005, lieu: "TECOMAH, Jouy-en-Josas", type: "international", entries: 121, hybrideurs: 24, pays: 7, jury_president: "E. Roy Epperson (US)", podium: [ { rank: 1, cultivar: "Bye Bye Blues", hybrideur: "George Sutton", pays: "USA" }, { rank: 2, cultivar: "Chariots of Fire", hybrideur: "Aitken", pays: "USA" }, { rank: 3, cultivar: "Got Milk", hybrideur: "Aitken", pays: "USA" }, { rank: 4, cultivar: "Finnigan\u2019s Finagling Factor", hybrideur: "Stetson", pays: "USA" }, { rank: 5, cultivar: "Gwennaden", hybrideur: "Madoré", pays: "France" }, { rank: 6, cultivar: "Diabolique", hybrideur: "Schreiner", pays: "USA" }, ], prix_public: "World Premier (Schneider)", prix_parfum: "Pretty Edgy (Blyth, AU)", prix_francais: "Gwennaden (Madoré)", }, { year: 2007, lieu: "TECOMAH, Jouy-en-Josas", type: "international", entries: 34, hybrideurs: null, pays: null, jury_president: "Stephanie Boot (NZ)", note: "Floraison avancée de 3 semaines", podium: [ { rank: 1, cultivar: "Solovinaya Noch\u2019", hybrideur: "Nina Miroshnichenko", pays: "Ukraine" }, { rank: 2, cultivar: "Mamy Framboise", hybrideur: "Virginie Fur", pays: "France" }, { rank: 3, cultivar: "Italian Ice", hybrideur: "A.D. Cadd", pays: "USA" }, ], prix_public: "Toréro (Cayeux)", prix_parfum: "Arcobaleno (Mostosi, IT)", prix_francais: "Mamy Framboise (Fur)", }, { year: 2011, lieu: "TECOMAH, Jouy-en-Josas", type: "international", entries: null, hybrideurs: null, pays: null, jury_president: "Valeria Rosselli (IT)", podium: [ { rank: 1, cultivar: "Aleutian Islands", hybrideur: "Michael Sutton", pays: "USA" }, { rank: 2, cultivar: "Échirolles", hybrideur: "Laporte", pays: "France" }, { rank: 3, cultivar: "Danube du Barry", hybrideur: "Vasquez-Poupin", pays: "France" }, ], prix_public: "Grenade (Cayeux)", prix_parfum: "semis 060402 (Jacob)", }, { year: 2015, lieu: "Parc Floral de Paris", type: "international", entries: 113, hybrideurs: 31, pays: null, jury_president: "Kathy Chilton (US)", podium: [ { rank: 1, cultivar: "Barbe Noire", hybrideur: "Richard Cayeux", pays: "France" }, { rank: 2, cultivar: "Cielo Alto", hybrideur: "Angelo Garanzini", pays: "Italie" }, { rank: 3, cultivar: "Clotho\u2019s Web", hybrideur: "Anton Mego", pays: "Slovaquie" }, { rank: 4, cultivar: "Clignotant", hybrideur: "Stéphane Boivin", pays: "France" }, { rank: 5, cultivar: "Nuage de Lait / Fruit de la Passion", hybrideur: "Stéphane Boivin", pays: "France" }, { rank: 7, cultivar: "Villa Erba", hybrideur: "Richard Cayeux", pays: "France" }, { rank: 8, cultivar: "Guardian\u2019s Fire (sdlg)", hybrideur: "Anton Mego", pays: "Slovaquie" }, { rank: 9, cultivar: "Fall Symphony", hybrideur: "Lorena Montanari", pays: "Italie" }, { rank: 10, cultivar: "Braises Incandescentes", hybrideur: "Alain Chapelle", pays: "France" }, ], prix_public: "Barbe Noire (Cayeux)", prix_parfum: "Cielo Alto (Garanzini)", prix_francais: "Richard Cayeux", }, { year: 2017, lieu: "Parc Floral de Paris", type: "international", entries: 110, hybrideurs: 35, pays: null, jury_president: "Hooker Nichols (US)", podium: [ { rank: 1, cultivar: "Chachar", hybrideur: "Zdeněk Seidl", pays: "Rép. tchèque" }, { rank: 2, cultivar: "High Desert", hybrideur: "Keith Keppel", pays: "USA" }, { rank: 3, cultivar: "Midnight Velvet", hybrideur: "Tom Johnson", pays: "USA" }, { rank: 3, cultivar: "semis 06-2155-2", hybrideur: "Anton Mego", pays: "Slovaquie" }, { rank: 5, cultivar: "Blackbird Tears", hybrideur: "Steve Poole", pays: "USA" }, { rank: 6, cultivar: "Cigarillo", hybrideur: "Richard Cayeux", pays: "France" }, ], prix_public: "Ogar (Seidl)", prix_gladys: "Cigarillo (Cayeux)", prix_ransom: "Blackbird Tears (Poole)", }, { year: 2019, lieu: "Parc Floral de Paris", type: "international", entries: 120, hybrideurs: 35, pays: null, jury_president: "Andy Rivarola (US)", podium: [ { rank: 1, cultivar: "My Red Drums", hybrideur: "Daniel Balland", pays: "France" }, { rank: 2, cultivar: "Marry The Night", hybrideur: "Tom Johnson", pays: "USA" }, { rank: 3, cultivar: "Beauté de Sologne (sdlg)", hybrideur: "Nicolas Bourdillon", pays: "France" }, { rank: 4, cultivar: "Church Lady", hybrideur: "Burseen", pays: "USA" }, { rank: 5, cultivar: "Locomotion", hybrideur: "Tom Johnson", pays: "USA" }, { rank: 7, cultivar: "Mixed Signals", hybrideur: "Keith Keppel", pays: "USA" }, ], prix_public: "Locomotion (Johnson)", prix_gladys: "My Red Drums (Balland)", prix_ransom: "Locomotion (Johnson)", }, { year: 2022, lieu: "Parc Floral de Paris", type: "international", entries: null, hybrideurs: null, pays: null, jury_president: "Richard Cayeux (FR)", note: "Jury restreint post-COVID", podium: [ { rank: 1, cultivar: "Nad Oblaky", hybrideur: "Zdeněk Seidl", pays: "Rép. tchèque" }, { rank: 2, cultivar: "Les Avenières (sdlg)", hybrideur: "Stéphane Boivin", pays: "France" }, { rank: 3, cultivar: "Sylvain Ruaud", hybrideur: "Daniel Balland", pays: "France" }, { rank: 4, cultivar: "Secret Land", hybrideur: "Robert Piatek", pays: "Pologne" }, { rank: 5, cultivar: "Santa Cruz Surf", hybrideur: "Joe Ghio", pays: "USA" }, { rank: 6, cultivar: "Parfum Parisien (sdlg)", hybrideur: "Lorena Montanari", pays: "Italie" }, ], prix_public: "Les Avenières (Boivin)", prix_gladys: "Les Avenières (Boivin)", prix_parfum: "Parfum Parisien (Montanari)", prix_ransom: "Maggese (Bianco, IT)", }, { year: 2024, lieu: "Parc Floral de Paris", type: "international", entries: null, hybrideurs: null, pays: null, jury_president: "Sofia Cavini (IT)", podium: [ { rank: 1, cultivar: "Hatshepsout", hybrideur: "Richard Cayeux", pays: "France" }, { rank: 2, cultivar: "Behind The Rainbow", hybrideur: "Etienne Nouwen", pays: "Belgique" }, { rank: 3, cultivar: "Prince Timeo", hybrideur: "Sébastien Cancade", pays: "France" }, { rank: 4, cultivar: "Ignite The Light", hybrideur: "Tom Johnson", pays: "USA" }, { rank: 5, cultivar: "Léon C\u2019est Moi", hybrideur: "Lorena Montanari", pays: "Italie" }, { rank: 7, cultivar: "Zone 51", hybrideur: "Bénédicte Habert", pays: "France" }, ], prix_public: "In Rosa Per Caso (V. Negri, IT)", prix_gladys: "Hatshepsout (Cayeux)", prix_parfum: "Rose de Porcelaine (Habert)", }, ]; const florence = [ { year: 2000, cultivar: "Diabolique", hybrideur: "Schreiner\u2019s", pays: "USA" }, { year: 2001, cultivar: "H.C. Stetson", hybrideur: "R.E. Stetson II", pays: "USA" }, { year: 2002, cultivar: "Dude Ranch", hybrideur: "Paul Black", pays: "USA" }, { year: 2003, cultivar: "Pay The Price", hybrideur: "Graeme Grosvenor", pays: "Australie" }, { year: 2004, cultivar: "Frosted Fantasy", hybrideur: "Anna & David Cadd", pays: "USA" }, { year: 2005, cultivar: "Paul Black", hybrideur: "Thomas Johnson", pays: "USA" }, { year: 2006, cultivar: "Recondita Armonia", hybrideur: "Mauro Bertuzzi", pays: "Italie" }, { year: 2007, cultivar: "Aurélie", hybrideur: "Richard Cayeux", pays: "France" }, { year: 2008, cultivar: "Morning Sunrise", hybrideur: "Thomas Johnson", pays: "USA" }, { year: 2009, cultivar: "Ravissant", hybrideur: "Richard Cayeux", pays: "France" }, { year: 2010, cultivar: "Alé Viola", hybrideur: "Stefano Gigli", pays: "Italie" }, { year: 2011, cultivar: "Silk Road", hybrideur: "Keith Keppel", pays: "USA" }, { year: 2012, cultivar: "Cheyenne My Dog", hybrideur: "Roberto Marucchi", pays: "Italie" }, { year: 2013, cultivar: "Vento Di Maggio", hybrideur: "Augusto Bianco", pays: "Italie" }, { year: 2014, cultivar: "Drifting", hybrideur: "Schreiner\u2019s", pays: "USA" }, { year: 2017, cultivar: "Spirit Rider", hybrideur: "Schreiner\u2019s", pays: "USA" }, { year: 2018, cultivar: "Anima Cara", hybrideur: "Angelo Garanzini", pays: "Italie" }, { year: 2019, cultivar: "Chachar", hybrideur: "Zdeněk Seidl", pays: "Rép. tchèque" }, { year: 2020, cultivar: "Dalí", hybrideur: "Augusto Bianco", pays: "Italie" }, { year: 2021, cultivar: "Belle Fille", hybrideur: "Marky Smith", pays: "USA" }, { year: 2022, cultivar: "Matka Theresa", hybrideur: "Robert Piatek", pays: "Pologne" }, { year: 2023, cultivar: "Azzurro Cielo", hybrideur: "Angelo Garanzini", pays: "Italie" }, { year: 2024, cultivar: "Me Pizzica", hybrideur: "Augusto Bianco", pays: "Italie" }, ]; const aisAwards = [ { cultivar: "Bye Bye Blues", hybrideur: "G. Sutton", pays: "USA", hm: 1999, am: 2002, other: null }, { cultivar: "High Desert", hybrideur: "K. Keppel", pays: "USA", hm: 2017, am: 2019, other: null }, { cultivar: "Locomotion", hybrideur: "T. Johnson", pays: "USA", hm: 2019, am: null, other: null }, { cultivar: "Marry The Night", hybrideur: "T. Johnson", pays: "USA", hm: 2019, am: 2021, other: "Wister 2025" }, { cultivar: "Santa Cruz Surf", hybrideur: "J. Ghio", pays: "USA", hm: 2021, am: null, other: null }, { cultivar: "Barbe Noire", hybrideur: "R. Cayeux", pays: "France", hm: null, am: null, other: null }, { cultivar: "Chachar", hybrideur: "Z. Seidl", pays: "Rép. tchèque", hm: null, am: null, other: "Fiorino d\u2019Oro 2019" }, { cultivar: "My Red Drums", hybrideur: "D. Balland", pays: "France", hm: null, am: null, other: null }, { cultivar: "Nad Oblaky", hybrideur: "Z. Seidl", pays: "Rép. tchèque", hm: null, am: null, other: null }, { cultivar: "Hatshepsout", hybrideur: "R. Cayeux", pays: "France", hm: null, am: null, other: null }, { cultivar: "Cielo Alto", hybrideur: "A. Garanzini", pays: "Italie", hm: null, am: null, other: null }, { cultivar: "Behind The Rainbow", hybrideur: "E. Nouwen", pays: "Belgique", hm: null, am: null, other: null }, ]; const GOLD = "#8B6914"; const BLUE = "#2C3E6B"; const COUNTRY_COLORS = { "France": "#2C3E6B", "USA": "#c0392b", "Italie": "#27ae60", "Ukraine": "#f1c40f", "Rép. tchèque": "#8e44ad", "Slovaquie": "#e67e22", "Pologne": "#e74c3c", "Belgique": "#1abc9c", "Australie": "#2ecc71", }; function computeGeoData() { return editions.filter(e => e.type === "international").map(ed => { const counts = { year: ed.year, France: 0, USA: 0, "Europe (hors FR)": 0 }; ed.podium.forEach(p => { if (p.pays === "France") counts["France"]++; else if (p.pays === "USA") counts["USA"]++; else counts["Europe (hors FR)"]++; }); return counts; }); } function computeHybrideurStats() { const stats = {}; editions.forEach(ed => { ed.podium.forEach(p => { const key = p.hybrideur; if (!stats[key]) stats[key] = { nom: key, pays: p.pays, gp: 0, podiums: 0, top5: 0, total: 0, years: [] }; stats[key].total++; if (p.rank === 1) stats[key].gp++; if (p.rank <= 3) stats[key].podiums++; if (p.rank <= 5) stats[key].top5++; if (!stats[key].years.includes(ed.year)) stats[key].years.push(ed.year); }); }); return Object.values(stats).sort((a,b) => b.podiums - a.podiums || b.gp - a.gp); } function computeCountryWins() { const wins = {}; editions.forEach(ed => { const w = ed.podium.find(p => p.rank === 1); if (w) { wins[w.pays] = (wins[w.pays] || 0) + 1; } }); return Object.entries(wins).map(([pays, count]) => ({ pays, count })).sort((a,b) => b.count - a.count); } function computeJuryVsPublic() { return editions.filter(e => e.prix_public).map(ed => { const winner = ed.podium[0]; const pubText = ed.prix_public || ""; const pubCultivar = pubText.split(" (")[0]; const match = winner && pubCultivar.toLowerCase().includes(winner.cultivar.toLowerCase().substring(0,6)); return { year: ed.year, jury: winner?.cultivar || "?", public_choice: pubCultivar, match }; }); } const NavSelect = ({ value, onChange, options }) => (
Vue
); const StatCard = ({ num, label }) => (
{num} {label}
); const Var = ({ children }) => {children}; const SectionTitle = ({ children, sub }) => (

{children}

{sub &&

{sub}

}
); const H3 = ({ children }) => (

{children}

); const InfoBox = ({ color, title, children }) => (

{title}

{children}

); const Table = ({ headers, rows, goldFirst }) => (
{headers.map((h,i) => )} {rows.map((row,ri) => ( {row.map((cell,ci) => )} ))}
{h}
{cell}
); const CustomTooltip = ({ active, payload, label }) => { if (!active || !payload?.length) return null; return (
{label}
{payload.map((p,i) =>
{p.name}: {p.value}
)}
); }; const CFlag = ({ pays }) => {pays}; // ═══ VUE D’ENSEMBLE ═══ const ViewOverview = () => { const countryWins = computeCountryWins(); return (
{"Vue d\u2019ensemble"}

Grand Prix Philippe de Vilmorin — tous les lauréats

{ const w = e.podium[0]; return [{e.year}, {w?.cultivar}, w?.hybrideur, ]; })} />

Victoires par pays

pays + " (" + count + ")"} labelLine={{ strokeWidth: 1 }} style={{ fontSize: "0.75rem" }}> {countryWins.map((d,i) => )}
); }; // ═══ PALMARÈS ═══ const ViewPalmares = () => { const [selected, setSelected] = useState(editions[editions.length-1].year); const ed = editions.find(e => e.year === selected); const rankLabel = r => r === 1 ? "\ud83c\udfc6 1er" : r === 2 ? "\ud83e\udd48 2e" : r === 3 ? "\ud83e\udd49 3e" : r + "e"; return (
{"Palmarès complet"}
{editions.map(e => ( ))}
{ed && <>
{ed.lieu} {" \u2014 Président du jury : "}{ed.jury_president} {ed.entries && {" \u00b7 "}{ed.entries}{" variétés"}} {ed.hybrideurs && {" \u00b7 "}{ed.hybrideurs}{" hybrideurs"}} {ed.note &&
{ed.note}
}
[ {rankLabel(p.rank)}, {p.cultivar}, p.hybrideur, ])} />
{[ ed.prix_public && ["Prix du Public", ed.prix_public], ed.prix_parfum && ["Meilleur parfum", ed.prix_parfum], ed.prix_gladys && ["Prix Gladys Clarke", ed.prix_gladys], ed.prix_ransom && ["Prix Lawrence Ransom", ed.prix_ransom], ed.prix_francais && ["Meilleur français", ed.prix_francais], ].filter(Boolean).map(([lbl, val], i) => (
{lbl}
{val}
))}
} ); }; // ═══ GÉOPOLITIQUE ═══ const ViewGeo = () => { const regionData = useMemo(computeGeoData, []); return (
{"Basculement géopolitique"}

{"Présence au classement par bloc géographique"}

} />
2005 : top 4 intégralement américain. 2007 : première victoire non-américaine (Ukraine). 2015 : tournant français historique (6 iris FR dans le top 10). 2017–2022 : l’Europe centrale (Seidl, Mego, Piatek) s’impose. 2024 : 5 pays représentés dans le top 7.
); }; // ═══ HYBRIDEURS ═══ const ViewHybrideurs = () => { const stats = useMemo(computeHybrideurStats, []); return (
{"Palmarès par hybrideur"}
[ {s.nom}, , s.gp > 0 ? {s.gp} : "\u2014", s.podiums, s.top5, s.total, s.years.join(", ") ])} goldFirst={false} />

{"Podiums par hybrideur (top 10)"}

} />
); }; // ═══ JURY VS PUBLIC ═══ const ViewJuryPublic = () => { const data = useMemo(computeJuryVsPublic, []); return (
{"Jury vs Public"}
[ {d.year}, {d.jury}, d.public_choice, d.match ? {"✔ Oui"} : {"✘ Non"} ])} goldFirst={false} /> Sur 10 éditions, jury et public ne coïncident que 2 fois (2015 avec Barbe Noire, 2022 partiellement avec Les Avenières). Le public privilégie les couleurs vives et les iris florifères, tandis que le jury récompense la morphologie, le branchement et l’originalité du coloris. ); }; // ═══ FRANCIRIS VS FLORENCE ═══ const ViewVsFlorence = () => { const compYears = [2000, 2005, 2007, 2011, 2015, 2017, 2019, 2022, 2024]; const paired = compYears.map(y => { const fr = editions.find(e => e.year === y); const fl = florence.find(f => f.year === y); return { year: y, franciris: fr?.podium[0], florence: fl }; }).filter(d => d.franciris && d.florence); const flCountry = {}; florence.forEach(f => { flCountry[f.pays] = (flCountry[f.pays] || 0) + 1; }); const flPie = Object.entries(flCountry).map(([pays, count]) => ({ pays, count })).sort((a,b) => b.count - a.count); return (
{"Franciris vs Florence"}

{"Franciris \u2014 Victoires par pays"}

pays + " (" + count + ")"} style={{ fontSize: "0.7rem" }}> {computeCountryWins().map((d,i) => )}

{"Florence \u2014 Fiorino d\u2019Oro par pays"}

pays + " (" + count + ")"} style={{ fontSize: "0.7rem" }}> {flPie.map((d,i) => )}

{"Comparaison directe (années communes)"}

[ {d.year}, {d.franciris.cultivar}, , {d.florence.cultivar}, , ])} goldFirst={false} /> Chachar (Zdeněk Seidl) est le seul cultivar à avoir remporté les deux prix suprêmes européens : le Philippe de Vilmorin (Franciris 2017) et le Fiorino d’Oro (Florence 2019). High Desert (Keppel) a concouru aux deux : 2e à Franciris 2017, prix de la Meilleure variété précoce à Florence 2019. ); }; // ═══ RÉCOMPENSES CROISÉES ═══ const ViewAIS = () => (
{"Récompenses croisées"}
[ {a.cultivar}, a.hybrideur, , a.hm ? {a.hm} : {"\u2014"}, a.am ? {a.am} : {"\u2014"}, a.other ? {a.other} : {"\u2014"}, ])} goldFirst={false} /> Tous les cultivars américains primés à Franciris ont reçu au minimum un HM. Aucun cultivar européen n’a obtenu la moindre récompense AIS. Le système AIS exige une évaluation dans des jardins nord-américains où les iris européens sont absents — c’est un problème de distribution, pas de qualité.

{"Trajectoire exceptionnelle : \u2018Marry The Night\u2019"}

{[ { year: 2017, label: "Introduction" }, { year: 2019, label: "HM + Franciris 2e" }, { year: 2021, label: "AM" }, { year: 2023, label: "Nelson Award" }, { year: 2025, label: "Wister Medal" }, ].map((s,i) => (
{s.year}
{s.label}
))}
); // ═══ MAIN APP ═══ const views = [ { value: "overview", label: "Vue d\u2019ensemble", component: ViewOverview }, { value: "palmares", label: "Palmar\u00e8s complet par \u00e9dition", component: ViewPalmares }, { value: "geo", label: "Basculement g\u00e9opolitique", component: ViewGeo }, { value: "hybrideurs", label: "Palmar\u00e8s par hybrideur", component: ViewHybrideurs }, { value: "jurypublic", label: "Jury vs Public", component: ViewJuryPublic }, { value: "florence", label: "Franciris vs Florence", component: ViewVsFlorence }, { value: "ais", label: "R\u00e9compenses crois\u00e9es (AIS / Florence)", component: ViewAIS }, ]; export default function App() { const [view, setView] = useState("overview"); const Current = views.find(v => v.value === view)?.component || ViewOverview; return (
{"♉ ❦ ♉"}

Franciris Analytics

{"Le tableau de bord du concours international d\u2019iris de Paris \u2014 10 \u00e9ditions \u00b7 2000\u20132024"}

{["Palmar\u00e8s complets", "Analyse g\u00e9opolitique", "Franciris vs Florence", "R\u00e9compenses crois\u00e9es"].map(b => ( {b} ))}
Franciris Analytics{" \u2014 SFIB \u00b7 L\u2019Iriseraie"}
{"Sources : iris-bulbeuses.org \u00b7 wiki.irises.org \u00b7 societaitalianairis.com \u00b7 Iris et Bulbeuses"}
); }