--- /** * The Blog's top slot: the featured or latest post in the one featured * panel. The cover fills the left side when the post has one; otherwise the * blog's seal art stands in. */ import Button from "@gk/ui/components/Button.astro"; import GiltCorners from "@gk/ui/components/GiltCorners.astro"; import Motif from "@gk/ui/components/Motif.astro"; import Seal from "@gk/ui/components/Seal.astro"; import Star from "@gk/ui/components/Star.astro"; import StarPath from "@gk/ui/components/StarPath.astro"; import StatusPill from "@gk/ui/components/StatusPill.astro"; import TickRing from "@gk/ui/components/TickRing.astro"; import TickScale from "@gk/ui/components/TickScale.astro"; import { filamentBanner } from "@gk/ui/components/seals.ts"; import { dateLine, nowStatuses, pageLinks, type Post } from "../../lib/blog.ts"; import { mediaSrc, type SiteIndex } from "../../lib/site.ts"; import PageChips from "./PageChips.astro"; interface Props { post: Post; label: "Featured" | "Latest"; site: SiteIndex; } const { post, label, site: s } = Astro.props; const href = s.href(post) ?? "#"; const cover = mediaSrc(post.data.cover); const links = pageLinks(s, post); const now = nowStatuses(s, post); ---
{ cover ? ( <> {post.title}
{label} · {post.data.topic} {dateLine(post)} {now.map((st) => Now · {st.data.kind})}

{post.title}

{post.data.summary &&

{post.data.summary}

} {links.length > 0 && }