import { ExternalLink } from 'lucide-react';
import type { Metadata } from 'next';
import Link from 'next/link';
import { t } from '@/i18n';
import { isNotBuilt } from '@/lib/api';
import { apiExplore } from '@/lib/api-explore';
import { compact, formatDate, grouped } from '@/lib/format';
import { routes } from '@/lib/site';
import type { SourcesResponse } from '@/lib/types-explore';
import { NotBuiltState } from '@/components/data/empty-state';
import { FreshnessBadge } from '@/components/data/freshness-badge';
import { PageHeader } from '@/components/explore/page-header';
import { FooterCredits } from '@/components/layout/site-footer';
export const revalidate = 900;
export const metadata: Metadata = {
title: t('sources.title'),
description: t('sources.sub', { n: 9 }),
alternates: { canonical: routes.sources() },
};
export default async function SourcesPage() {
let data: SourcesResponse | null = null;
try {
data = await apiExplore.sources();
} catch (e) {
if (!isNotBuilt(e)) throw e;
}
const items = data?.items ?? [];
return (
<>
{t('sources.rule')}
{s.attribution}
: null}{s.id}
{s.url ? (