import PublicLayout from '../../components/PublicLayout.jsx' import PageHeader from '../../components/PageHeader.jsx' import { Loading, ErrorState, EmptyState } from '../../components/PageState.jsx' import { useAsync } from '../../lib/useAsync.js' import { longDate } from '../../lib/format.js' import { api } from '../../api/client.js' import { useSite } from '../../contexts/SiteContext.jsx' export default function News() { const { loading, error, data } = useAsync(() => api.posts('news')) const { siteShortName } = useSite() const posts = data || [] return (
{loading && } {error && } {!loading && !error && posts.length === 0 && No news posts yet — check back soon.} {posts.map((p) => (
News {longDate(p.published_at || p.created_at)}

{p.title}

{(p.excerpt || p.body) && (

{p.excerpt || stripHtml(p.body)}

)}
))}
) } function stripHtml(html) { if (!html) return '' const text = html.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim() return text.length > 280 ? text.slice(0, 280) + '…' : text }