Event 8
card3 ColumnsText Align CenterButtonsDateTagsMultiple Images

Code
relume-event8.tsx
import { Badge } from "@/components/ui/badge";
import { Button, type ButtonProps } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { ChevronRight } from "relume-icons";
type ImageProps = {
src: string;
alt?: string;
};
type Date = {
weekday: string;
day: string;
monthYear: string;
};
type FeaturedEvent = {
url: string;
image: ImageProps;
date: Date;
category: string;
title: string;
location: string;
description: string;
button: ButtonProps;
};
type Props = {
tagline: string;
heading: string;
description: string;
button: ButtonProps;
featuredEvents: FeaturedEvent[];
};
export type Event8Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Event8 = (props: Event8Props) => {
const { tagline, heading, description, button, featuredEvents } = {
...Event8Defaults,
...props,
};
return (
<section className="px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
<div className="mb-12 md:mb-18 lg:mb-20">
<div className="mx-auto max-w-lg text-center">
<h4 className="font-semibold">{tagline}</h4>
<h1 className="mt-3 text-h2 font-bold md:mt-4">{heading}</h1>
<p className="mt-5 text-medium md:mt-6">{description}</p>
</div>
</div>
<div className="grid grid-cols-1 gap-x-8 gap-y-12 md:grid-cols-2 md:gap-y-16 lg:grid-cols-3">
{featuredEvents.map((event, index) => (
<FeaturedEvent key={index} {...event} />
))}
</div>
<div className="mt-12 flex justify-center md:mt-18 lg:mt-20">
<Button {...button}>{button.title}</Button>
</div>
</div>
</section>
);
};
const FeaturedEvent: React.FC<FeaturedEvent> = ({
url,
image,
date,
category,
title,
location,
description,
button,
}) => {
return (
<Card className="flex flex-col items-start">
<a href={url} className="relative block aspect-[3/2] w-full">
<img src={image.src} alt={image.alt} className="absolute size-full object-cover" />
<div className="absolute top-4 right-4 flex min-w-28 flex-col items-center rounded-card bg-scheme-foreground px-1 py-3 text-small text-scheme-text">
<span>{date.weekday}</span>
<h4 className="text-h4 font-bold">{date.day}</h4>
<span>{date.monthYear}</span>
</div>
</a>
<div className="flex flex-col items-start p-6">
<Badge className="mb-3 md:mb-4">{category}</Badge>
<a href={url}>
<h2 className="text-h5 font-bold">{title}</h2>
</a>
<p className="mb-2">{location}</p>
<p>{description}</p>
<Button {...button} className="mt-5 md:mt-6">
{button.title}
</Button>
</div>
</Card>
);
};
export const Event8Defaults: Props = {
tagline: "Tagline",
heading: "Events",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
button: {
variant: "secondary",
title: "View all",
},
featuredEvents: [
{
url: "#",
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg",
alt: "Relume placeholder image 1",
},
date: {
weekday: "Fri",
day: "09",
monthYear: "Feb 2024",
},
category: "Category",
title: "Event title heading",
location: "Location",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.",
button: {
title: "View event",
variant: "link",
size: "link",
iconRight: <ChevronRight className="text-scheme-text" />,
},
},
{
url: "#",
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg",
alt: "Relume placeholder image 1",
},
date: {
weekday: "Sat",
day: "10",
monthYear: "Feb 2024",
},
category: "Category",
title: "Event title heading",
location: "Location",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.",
button: {
title: "View event",
variant: "link",
size: "link",
iconRight: <ChevronRight className="text-scheme-text" />,
},
},
{
url: "#",
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg",
alt: "Relume placeholder image 1",
},
date: {
weekday: "Sun",
day: "11",
monthYear: "Feb 2024",
},
category: "Category",
title: "Event title heading",
location: "Location",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.",
button: {
title: "View event",
variant: "link",
size: "link",
iconRight: <ChevronRight className="text-scheme-text" />,
},
},
],
};npm i @radix-ui/react-slot @radix-ui/react-tabs class-variance-authority@0.7.1 clsx@^2.1.1 motion@^12.15.0 relume-icons@1.3.0 tailwind-merge@^2.2.2


