// Mosaic site โ€” SOURCES directory page // Exports: SourcesPage const SrcTable = ({ rows }) => (
{["Source", "Owner / parent", "Ownership", "Founded", "Country"].map((h, i) => ( {h} ))}
{rows.map((r, i) => (
{FAVS[r.f].n} {r.k} {r.o} {r.t} {r.y} {r.c}
))}
); const SourcesPage = () => { // One flat table โ€” the filter chips do the grouping, no section headings. const all = [ ...SOURCE_DIR.outlets.map((r) => ({ ...r, g: "outlets" })), ...SOURCE_DIR.independent.map((r) => ({ ...r, g: "independent" })), ...SOURCE_DIR.youtube.map((r) => ({ ...r, g: "youtube" })), ...SOURCE_DIR.international.map((r) => ({ ...r, g: "international" })), ]; const [filter, setFilter] = React.useState("all"); const rows = filter === "all" ? all : all.filter((r) => r.g === filter); return (
Source directory ยท who owns what

Sources

Verifiable ownership facts only โ€” no bias or quality ratings here. Where a source leans is shown per story in each topic's source map, based on what it actually published. Compiled from the Media Ownership Monitor (RSF/Freedom Network), Wikipedia and reporting. Last checked Jun 2026.

{[["outlets", "Outlets"], ["independent", "Independent"], ["youtube", "YouTube"], ["international", "International"]].map(([k, label]) => ( ))}
); }; Object.assign(window, { SourcesPage });