import { html } from 'lit';
import { customElement, state } from 'lit/decorators.js';
import { LitroPage } from '@beatzball/litro/runtime';
import { definePageData } from '@beatzball/litro';
import type { Post } from 'litro:content';
import { getPosts, getGlobalData } from 'litro:content';
import '../src/components/litro-footer.js';
export interface HomeData {
recentPosts: Post[];
siteTitle: string;
siteDescription: string;
}
function toDate(d: Date | string): Date { return d instanceof Date ? d : new Date(d as string); }
export const pageData = definePageData(async (_event) => {
const [recentPosts, metadata] = await Promise.all([
getPosts({ limit: 5 }),
getGlobalData(),
]);
return {
recentPosts,
siteTitle: String(metadata.title ?? '{{projectName}}'),
siteDescription: String(metadata.description ?? ''),
} satisfies HomeData;
});
@customElement('page-home')
export class HomePage extends LitroPage {
@state() declare serverData: HomeData | null;
render() {
const { recentPosts = [], siteTitle = '{{projectName}}', siteDescription = '' } = this.serverData ?? {};
return html`
${siteTitle}
${siteDescription ? html`${siteDescription}
` : ''}
Recent Posts
${recentPosts.map(post => html`
-
${post.title}
${post.description ? html`
${post.description}
` : ''}
`)}
All Posts →
`;
}
}
export default HomePage;