{ "name": "blog-card-two", "type": "registry:ui", "registryDependencies": [], "dependencies": [ "lucide-react" ], "devDependencies": [], "tailwind": {}, "cssVars": { "light": {}, "dark": {} }, "files": [ { "path": "blog-card-two.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport Link from 'next/link';\nimport { Bookmark, Heart, Clock, Tag } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport type BlogCardTwoMeta = {\n category?: string;\n categoryHref?: string;\n timeLabel?: string; // e.g. \"48 min ago\"\n};\n\nexport type BlogCardTwoProps = {\n /** Card destination; if undefined, renders a plain
. */\n href?: string;\n\n /** Background image */\n image: { src: string; alt?: string };\n\n /** Title text (used for aria-label when href is present) */\n title: string;\n\n /** Bottom meta row */\n meta?: BlogCardTwoMeta;\n\n /** Action callbacks */\n onLike?: () => void;\n onBookmark?: () => void;\n\n /** Visual tuning */\n rounded?: string; // e.g. \"rounded-2xl\"\n overlayClassName?: string; // gradient overlay\n titleClassName?: string;\n metaClassName?: string;\n actionClassName?: string;\n className?: string;\n\n /** Overlay variants */\n variant?: 'bottom-gradient' | 'center-fade';\n};\n\nexport function BlogCardTwo({\n href,\n image,\n title,\n meta,\n onLike,\n onBookmark,\n rounded = 'rounded-2xl',\n overlayClassName,\n titleClassName,\n metaClassName,\n actionClassName,\n className,\n variant = 'bottom-gradient',\n}: BlogCardTwoProps) {\n const Wrapper: any = href ? Link : 'article';\n const wrapperProps = href\n ? { href, 'aria-label': title }\n : { role: 'article' };\n\n return (\n \n {/* cover image (no rounding on the img itself; container controls rounding) */}\n {/* eslint-disable-next-line @next/next/no-img-element */}\n \n\n {/* overlay gradient */}\n \n\n {/* content row pinned to bottom */}\n
\n
\n \n {title}\n \n\n {(meta?.category || meta?.timeLabel) && (\n \n {meta?.category && (\n }\n >\n {meta.category}\n \n )}\n {meta?.timeLabel && (\n \n \n {meta.timeLabel}\n \n )}\n
\n )}\n
\n\n {/* actions */}\n \n {\n e.preventDefault();\n onLike?.();\n }}\n className='rounded-full bg-black/25 p-2 backdrop-blur hover:bg-black/35'\n >\n \n \n {\n e.preventDefault();\n onBookmark?.();\n }}\n className='rounded-full bg-black/25 p-2 backdrop-blur hover:bg-black/35'\n >\n \n \n \n \n \n );\n}\n\nfunction MetaPill({\n href,\n icon,\n children,\n}: React.PropsWithChildren<{ href?: string; icon?: React.ReactNode }>) {\n const Comp: any = href ? Link : 'span';\n const props = href ? { href } : { role: 'text' };\n return (\n \n {icon}\n {children}\n |\n \n );\n}\n", "type": "registry:ui" } ] }