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

All Posts →

`; } } export default HomePage;