summaryrefslogtreecommitdiff
path: root/src/components/posts/post-card.tsx
blob: 9544aea6437bf0a46a670e24d866fdfdc04f7728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { BlurImage } from '@/components/blur-image';
import { CalendarIcon, UserIcon } from 'lucide-react';
import Link from 'next/link';
import type React from 'react';
import Balancer from 'react-wrap-balancer';

interface PostCardProps {
  title: string;
  description: string;
  image?: string | null;
  url: string;
  date: string;
  author: string;
  tags?: string[];
}

export const PostCard: React.FC<PostCardProps> = ({
  title,
  description,
  image,
  url,
  date,
  author,
  tags,
}) => {
  return (
    <Link
      href={url}
      className='grid grid-cols-1 gap-4 bg-card/50 px-6 py-6 transition-colors hover:bg-card/80 md:grid-cols-3 xl:grid-cols-4'
    >
      <div className='order-2 flex h-full flex-col justify-between gap-4 md:order-1 md:col-span-2 xl:col-span-3'>
        <div className='flex-1 gap-4'>
          <h2 className='font-medium text-lg md:text-xl lg:text-2xl'>
            {title}
          </h2>
          <p className='line-clamp-3 overflow-hidden text-ellipsis text-medium text-muted-foreground'>
            <Balancer>{description}</Balancer>
          </p>
        </div>
        <div className='flex flex-col justify-center gap-4'>
          {/* <div className='flex flex-wrap gap-2'>
            {tags?.map((tag) => (
              <>
                <TagCard name={tag} key={tag} className='p-0 [&_svg]:size-4 [&_span]:text-muted-foreground gap-1' />
                {index < tags.length - 1 && <span className='text-muted-foreground'>•</span>}
              </>
            ))}
          </div> */}
          <div className='group inline-flex items-center gap-2 text-muted-foreground text-sm'>
            <span className='inline-flex items-center gap-1 capitalize'>
              <UserIcon className='size-4 transition-transform hover:scale-125' />
              {author}
            </span>
            <span>•</span>
            <span className='inline-flex items-center gap-1'>
              <CalendarIcon className='size-4 transition-transform hover:scale-125' />
              {date}
            </span>
          </div>
        </div>
      </div>

      {image && (
        <div className='group relative order-1 col-span-1 inline-flex items-center justify-center transition-transform hover:scale-105 md:order-2'>
          <BlurImage
            width={853}
            height={554}
            src={image}
            alt={title}
            className='relative rounded-lg'
          />
        </div>
      )}
    </Link>
  );
};