Content 25
standardText Align Left2 ColumnsImage/Video BottomRich TextVideo LightboxPortfolio Item Body Section

Code
relume-content25.tsx
import { useState } from "react";
import React from "react";
import clsx from "clsx";
import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog";
import { PlayCircle, ProgressActivity } from "relume-icons";
type ImageProps = {
src: string;
alt?: string;
};
type MetaTagProps = {
title: string;
description: string;
};
type Props = {
children: React.ReactNode;
heading: string;
metatags: MetaTagProps[];
image: ImageProps;
video: string;
};
export type Content25Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Content25 = (props: Content25Props) => {
const { children, heading, metatags, image, video } = {
...Content25Defaults,
...props,
};
const [isIframeLoaded, setIsIframeLoaded] = useState<boolean>(false);
return (
<section className="px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
<div className="mb-12 grid grid-cols-1 gap-5 md:mb-18 md:grid-cols-[1fr_1.5fr] md:gap-x-12 lg:mb-20 lg:gap-x-20">
<div>
<h3 className="text-h3 font-bold">{heading}</h3>
</div>
<div>
<div className="prose-base mb-16 md:mb-[5.5rem] lg:mb-24 prose-p:m-0 prose-p:mb-4 prose-p:leading-[1.5]">
{children}
</div>
<div>
{metatags.map((item, index) => (
<div
key={index}
className="flex items-center justify-between gap-8 border-b border-b-scheme-border py-5 first:border-t first:border-t-scheme-border"
>
<h3 className="text-h6 font-bold">{item.title}</h3>
<p>{item.description}</p>
</div>
))}
</div>
</div>
</div>
<div>
<Dialog>
<DialogTrigger asChild>
<button className="relative flex w-full items-center justify-center overflow-hidden rounded-image">
<img
src={image.src}
alt={image.alt}
className="aspect-video size-full object-cover"
/>
<span className="absolute inset-0 z-10 bg-neutral-darkest/50" />
<PlayCircle className="absolute z-20 size-20 text-white" />
</button>
</DialogTrigger>
<DialogContent>
{!isIframeLoaded && (
<ProgressActivity className="mx-auto size-16 animate-spin text-white" />
)}
<iframe
className={clsx(
"z-0 mx-auto aspect-video h-full w-full md:w-[738px] lg:w-[940px]",
{
visible: isIframeLoaded,
hidden: !isIframeLoaded,
},
)}
src={video}
allow="autoplay; encrypted-media; picture-in-picture"
allowFullScreen
onLoad={() => setIsIframeLoaded(true)}
></iframe>
</DialogContent>
</Dialog>
</div>
</div>
</section>
);
};
export const Content25Defaults: Props = {
heading: "Medium length section heading goes here",
metatags: [
{
title: "Label",
description: "Lorem ipsum",
},
{
title: "Label",
description: "Lorem ipsum",
},
{
title: "Label",
description: "Lorem ipsum",
},
{
title: "Label",
description: "Lorem ipsum",
},
],
children: (
<React.Fragment>
<p>
Morbi sed imperdiet in ipsum, adipiscing elit dui lectus. Tellus id scelerisque est
ultricies ultricies. Duis est sit sed leo nisl, blandit elit sagittis. Quisque tristique
consequat quam sed. Nisl at scelerisque amet nulla purus habitasse.
</p>
<p>
Nunc sed faucibus bibendum feugiat sed interdum. Ipsum egestas condimentum mi massa. In
tincidunt pharetra consectetur sed duis facilisis metus. Etiam egestas in nec sed et. Quis
lobortis at sit dictum eget nibh tortor commodo cursus.
</p>
<p>
Odio felis sagittis, morbi feugiat tortor vitae feugiat fusce aliquet. Nam elementum urna
nisi aliquet erat dolor enim. Ornare id morbi eget ipsum. Aliquam senectus neque ut id eget
consectetur dictum. Donec posuere pharetra odio consequat scelerisque et, nunc tortor. Nulla
adipiscing erat a erat. Condimentum lorem posuere gravida enim posuere cursus diam.
</p>
</React.Fragment>
),
video: "https://www.youtube.com/embed/8DKLYsikxTs?si=Ch9W0KrDWWUiCMMW",
image: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-video-thumbnail-landscape.svg",
alt: "Relume placeholder image",
},
};npm i @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-radio-group @radix-ui/react-select @radix-ui/react-slot class-variance-authority@0.7.1 clsx@^2.1.1 motion@^12.15.0 relume-icons@1.3.0 tailwind-merge@^2.2.2


