{ "name": "blog-card-four", "type": "registry:ui", "registryDependencies": [], "dependencies": [ "lucide-react" ], "devDependencies": [], "tailwind": {}, "cssVars": { "light": {}, "dark": {} }, "files": [ { "path": "blog-card-four.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport Link from 'next/link';\nimport { CalendarDays } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport type BlogCardFourProps = {\n /** Entire card link; if omitted renders as plain
. */\n href?: string;\n\n /** Cover image (top, rounded). */\n image: { src: string; alt?: string };\n\n /** Title and short description. */\n title: string;\n excerpt?: string;\n\n /** Footer meta. */\n author?: { name: string; avatar?: string; href?: string };\n dateISO?: string;\n dateLabel?: string;\n\n /** Visual tweaks */\n className?: string;\n imageClassName?: string;\n panelClassName?: string;\n titleClassName?: string;\n excerptClassName?: string;\n footerClassName?: string;\n\n /**\n * Layout variant:\n * - \"attached\": white panel slightly overlaps the image (screenshot look)\n * - \"flush\": panel sits directly under the image with no offset\n */\n variant?: 'attached' | 'flush';\n};\n\nexport function BlogCardFour({\n href,\n image,\n title,\n excerpt = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi necessitatibus repellat voluptatibus?',\n author,\n dateISO,\n dateLabel,\n className,\n imageClassName,\n panelClassName,\n titleClassName,\n excerptClassName,\n footerClassName,\n variant = 'attached',\n}: BlogCardFourProps) {\n const Wrapper: any = href ? Link : 'article';\n const wrapperProps = href\n ? { href, 'aria-label': title }\n : { role: 'article' };\n\n return (\n \n {/* Top cover image */}\n
\n {/* eslint-disable-next-line @next/next/no-img-element */}\n \n
\n\n {/* Info panel */}\n \n \n {title}\n \n\n {excerpt && (\n \n {excerpt}\n

\n )}\n\n \n {/* author */}\n {author && (\n
\n {author.avatar ? (\n // eslint-disable-next-line @next/next/no-img-element\n \n ) : (\n
\n )}\n {author.href ? (\n e.stopPropagation()}\n className='text-sm font-medium text-zinc-700 hover:underline dark:text-zinc-300'\n >\n {author.name}\n \n ) : (\n \n {author.name}\n \n )}\n
\n )}\n\n {(dateLabel || dateISO) && (\n \n \n {dateLabel}\n \n )}\n
\n \n \n );\n}\n\n/** Convenient preset matching the screenshot look */\nexport function OverlappedBlogCard(props: Omit) {\n return ;\n}\n", "type": "registry:ui" } ] }