LinkDetailPage
These templates include the full document shell. Each variant is shown in a separate frame (same URL as “open alone”).
CompactCard
Open alone →RichCard
Open alone →---import type { LinkOpenGraphPreview } from '../../lib/link-open-graph'import type { BacklinkSource } from '../../lib/internal-links/backlink-graph'import '../../styles/link-open-graph-preview.css'import MarkdownBlock from '../2_organisms/MarkdownBlock.astro'import PostHeader from '../2_organisms/PostHeader.astro'import Backlinks from '../2_organisms/Backlinks.astro'import LinkOpenGraphCard from '../2_organisms/LinkOpenGraphCard.astro'import Base from './Base.astro'
interface OpenGraphProps { url: string imageUrl: string imageAlt: string ogTitle: string ogDescription?: string}
interface Props { title: string /** `<meta name="description">` and related fallbacks. */ description: string noindex: boolean canonicalHref?: string copyablePostId?: string githubEditHref?: string openGraph?: OpenGraphProps width?: 'default' | 'wide' | 'full' /** Real pages use `Date` from content; Storybook static prerender fixtures may use ISO strings. */ publishedAt: Date | string tags: string[] /** Pages pass a `Map`; Storybook static args serialize to a plain object — both are supported. */ tagCounts: Map<string, number> | Record<string, number> postId: string linkUrl: string openGraphPreview: LinkOpenGraphPreview | null backlinks: BacklinkSource[]}
const { title, description, noindex, canonicalHref, copyablePostId, githubEditHref, openGraph, width = 'default', publishedAt, tags, tagCounts, postId, linkUrl, openGraphPreview, backlinks,} = Astro.props---
<Base title={title} description={description} noindex={noindex} width={width} canonicalHref={canonicalHref} copyablePostId={copyablePostId} githubEditHref={githubEditHref} openGraph={openGraph}> <article> <PostHeader title={title} postType="link" publishedAt={publishedAt} tags={tags} tagCounts={tagCounts} postId={postId} secret={noindex} class="mb-1" /> <div class="mb-6"> <LinkOpenGraphCard href={linkUrl} openGraphPreview={openGraphPreview} /> </div> <MarkdownBlock> <slot /> </MarkdownBlock> <Backlinks sources={backlinks} /> </article></Base>