import Link from "next/link"; import { MDXRemote } from "next-mdx-remote/rsc"; import { Box, Divider, Typography, Stack } from "@mui/material"; import type { PostMeta } from "../lib/mdx"; import AuthorInfo from "./AuthorInfo"; import { TagList } from "./TagList"; import formatTimeAgo from "../lib/formatTimeAgo"; import { calculateReadingTime } from "../lib/mdx"; import ImageRenderer from "./ImageRenderer"; import LinkRenderer from "./LinkRenderer"; const components = { img: ImageRenderer, a: LinkRenderer, }; export type PostCardVariant = "featured" | "grid"; export function PostCard({ post, blogRootUrl, showFullContent = false, variant = "featured", }: { post: PostMeta; blogRootUrl: string; showFullContent?: boolean; variant?: PostCardVariant; }) { const isGrid = variant === "grid"; return ( {formatTimeAgo(new Date(`${post.date}T00:00:00`)).toUpperCase()} ยท{" "} {`${calculateReadingTime(post.mdxSource || "")} MIN READ`} {post.title} {!isGrid && ( )} t.slug) ?? []} /> {showFullContent ? (
) : ( <> {post.featuredImage && ( {variant === "grid" ? ( // Grid variant โ†’ fixed aspect ratio, crop if needed ) : ( // Featured variant โ†’ dynamic width, natural height )} )} {post.summary && ( {post.summary} )} Read more โ†’ )}
); }