---
const {
currentEntry,
allEntries = [],
} = Astro.props;
const slugOf = (entry) => String(entry.id).replace(/\.(md|mdx)$/i, "");
const hrefOf = (entry) => `/glossaire/${slugOf(entry)}/`;
const collator = new Intl.Collator("fr", { sensitivity: "base", numeric: true });
const bySlug = new Map(allEntries.map((entry) => [slugOf(entry), entry]));
const currentSlug = slugOf(currentEntry);
const fondamentauxWanted = [
"archicratie",
"tension",
"arcalite",
"cratialite",
"archicration",
"co-viabilite",
];
const fondamentaux = fondamentauxWanted
.map((slug) => bySlug.get(slug))
.filter(Boolean);
function resolveList(slugs = []) {
return slugs
.map((slug) => bySlug.get(slug))
.filter(Boolean);
}
function uniqueBySlug(entries) {
const seen = new Set();
const out = [];
for (const entry of entries) {
const slug = slugOf(entry);
if (seen.has(slug)) continue;
seen.add(slug);
out.push(entry);
}
return out;
}
const relatedEntries = uniqueBySlug(resolveList(currentEntry.data.related ?? []))
.sort((a, b) => collator.compare(a.data.term, b.data.term));
const opposedEntries = uniqueBySlug(resolveList(currentEntry.data.opposedTo ?? []))
.sort((a, b) => collator.compare(a.data.term, b.data.term));
const seeAlsoEntries = uniqueBySlug(resolveList(currentEntry.data.seeAlso ?? []))
.sort((a, b) => collator.compare(a.data.term, b.data.term));
const paradigmes = [...allEntries]
.filter((e) => e.data.kind === "paradigme" && slugOf(e) !== currentSlug)
.sort((a, b) => collator.compare(a.data.term, b.data.term));
function contextualParadigmsFor(entry) {
const relatedParadigms = (entry.data.related ?? [])
.map((slug) => bySlug.get(slug))
.filter((e) => e && e.data.kind === "paradigme");
const seeAlsoParadigms = (entry.data.seeAlso ?? [])
.map((slug) => bySlug.get(slug))
.filter((e) => e && e.data.kind === "paradigme");
const opposedParadigms = (entry.data.opposedTo ?? [])
.map((slug) => bySlug.get(slug))
.filter((e) => e && e.data.kind === "paradigme");
const merged = uniqueBySlug([
...relatedParadigms,
...seeAlsoParadigms,
...opposedParadigms,
]);
if (merged.length > 0) {
return merged.slice(0, 5);
}
if (entry.data.kind === "paradigme") {
const preferred = [
"gouvernementalite",
"gouvernementalite-algorithmique",
"cybernetique",
"biopolitique",
"bureaucratie",
"contractualisme-hobbesien",
"liberalisme-proprietaire",
"volonte-generale",
];
return uniqueBySlug(
preferred
.filter((slug) => slug !== currentSlug)
.map((slug) => bySlug.get(slug))
.filter(Boolean)
).slice(0, 5);
}
return paradigmes.slice(0, 4);
}
const contextualParadigms = contextualParadigmsFor(currentEntry);
const kindLabels = {
concept: "Concept",
diagnostic: "Diagnostic",
topologie: "Topologie",
verbe: "Verbe",
paradigme: "Paradigme",
};
const domainLabels = {
transversal: "Transversal",
theorie: "Théorie",
"cas-ia": "Cas IA",
};
const levelLabels = {
fondamental: "Fondamental",
intermediaire: "Intermédiaire",
avance: "Avancé",
};
const metaLabel = [
kindLabels[currentEntry.data.kind] ?? currentEntry.data.kind,
domainLabels[currentEntry.data.domain] ?? currentEntry.data.domain,
levelLabels[currentEntry.data.level] ?? currentEntry.data.level,
].join(" · ");
---