// ─── ARCHIVE PAGE ────────────────────────────────────────────────────────── // Editorial list: big typography + small tile. Search + service filter. function ArchiveHero({ count }) { const isMobile = useIsMobile(900); return (

Alle podcasts · {count}

Podcasts waar we trots op zijn.

Een greep uit producties voor partners, makers en eigen titels.

); } function FilterBar({ query, setQuery, serviceFilter, setServiceFilter }) { const isMobile = useIsMobile(900); const services = window.SPRAAKMAKER_SERVICES || []; return (
setQuery(e.target.value)} style={{ width: '100%', padding: '10px 14px 10px 40px', border: '1px solid var(--border)', borderRadius: 100, background: 'var(--bg-alt)', fontSize: 14, fontFamily: 'inherit', color: 'var(--fg)', outline: 'none', }} />
{services.map(s => ( ))}
); } function CaseRow({ c, index }) { const isMobile = useIsMobile(900); const [hover, setHover] = React.useState(false); return ( setHover(true)} onMouseLeave={() => setHover(false)}>

{c.client}

{c.title}

{!isMobile && (

{c.summary}

)}
{!isMobile && (
{c.services.slice(0, 3).map(slug => ( {getServiceLabel(slug)} ))} {c.services.length > 3 && ( +{c.services.length - 3} )}
)} {!isMobile && (
)}
); } function ArchiveList({ cases }) { if (cases.length === 0) { return (

Geen podcasts gevonden voor deze filter.

); } return (
{cases.map((c, i) => )}
); } async function loadCases() { return window.SPRAAKMAKER_CASES || []; } function ArchivePage() { const [scrolled, setScrolled] = React.useState(false); const [query, setQuery] = React.useState(''); const [serviceFilter, setServiceFilter] = React.useState(null); const [cases, setCases] = React.useState(null); React.useEffect(() => { loadCases().then(setCases); }, []); React.useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 40); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); const all = (cases || []).filter(c => c.published !== false); const filtered = all.filter(c => { if (serviceFilter && !c.services.includes(serviceFilter)) return false; if (query) { const q = query.toLowerCase(); return c.title.toLowerCase().includes(q) || c.client.toLowerCase().includes(q); } return true; }); return ( <> ); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();