Blocks

Layout 609

standard
1 ColumnText Align CenterText Align LeftIconsButtonsBenefits Section
Layout 609

Code

relume-layout609.tsx
import { Button, type ButtonProps } from "@/components/ui/button";
import { ChevronRight, RelumeIcon } from "relume-icons";

type ListItem = {
  icon: React.ReactNode;
  heading: string;
  description: string;
};

type Props = {
  tagline: string;
  heading: string;
  description: string;
  listItems: ListItem[];
  buttons: ButtonProps[];
};

export type Layout609Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;

export const Layout609 = (props: Layout609Props) => {
  const { tagline, heading, description, listItems, buttons } = {
    ...props,
    ...Layout609Defaults,
  };
  return (
    <section className="px-[5%] py-16 md:py-24 lg:py-28">
      <div className="container">
        <div className="mx-auto mb-12 max-w-lg text-center md:mb-18 lg:mb-20">
          <p className="mb-3 font-semibold md:mb-4">{tagline}</p>
          <h2 className="mb-5 text-h2 font-bold md:mb-6">{heading}</h2>
          <p className="text-medium">{description}</p>
        </div>
        <div className="mx-auto w-full max-w-lg">
          {listItems.map((item, index) => (
            <div
              key={index}
              className="flex w-full gap-6 border-t border-scheme-border py-6 md:gap-8 md:py-8 lg:py-12"
            >
              <div className="inline-block flex-none self-start">{item.icon}</div>
              <div>
                <div className="mb-3 md:mb-4">
                  <h3 className="text-h4 font-bold">{item.heading}</h3>
                </div>
                <p>{item.description}</p>
              </div>
            </div>
          ))}
          <div className="mt-8 flex flex-wrap items-center justify-center gap-4 md:mt-10 lg:mt-12">
            {buttons.map((button, index) => (
              <Button key={index} {...button}>
                {button.title}
              </Button>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
};

export const Layout609Defaults: Props = {
  tagline: "Tagline",
  heading: "Medium length section heading goes here",
  description:
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
  listItems: [
    {
      icon: <RelumeIcon className="size-12" />,
      heading: "Short heading goes here",
      description:
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
    },
    {
      icon: <RelumeIcon className="size-12" />,
      heading: "Short heading goes here",
      description:
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
    },
    {
      icon: <RelumeIcon className="size-12" />,
      heading: "Short heading goes here",
      description:
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
    },
  ],
  buttons: [
    {
      title: "Button",
      variant: "secondary",
    },
    {
      title: "Button",
      variant: "link",
      size: "link",
      iconRight: <ChevronRight className="text-scheme-text" />,
    },
  ],
};

npm i @radix-ui/react-dialog @radix-ui/react-slot class-variance-authority@0.7.1 clsx@^2.1.1 relume-icons@1.3.0 tailwind-merge@^2.2.2