4
Sponsor

Overlapped CTA Footer

Seven overlapped-CTA footer families consolidated into content-layout variants

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}

Installation

$ pnpm dlx shadcn@latest add @emailcn/footer-with-overlapped-cta

Usage

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
<FooterWithOverlappedCta
  {...FooterWithOverlappedCta.PreviewProps}
  variant="content"
  logoPosition="left"
/>

Examples

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}

Centered Content

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}

Centered Menu

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}
import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}

Centered Social Icons

import { FooterWithOverlappedCta } from "@/components/email/footer-with-overlapped-cta";
import type { FooterWithOverlappedCtaVariant } from "@/components/email/footer-with-overlapped-cta";

export function FooterWithOverlappedCtaDemo({
  variant = "content",
}: {
  variant?: string;
}) {
  const logoPosition = variant.endsWith("-right-logo") ? "right" : "left";
  const componentVariant = variant.replace(
    /-(left|right)-logo$/,
    ""
  ) as FooterWithOverlappedCtaVariant;
  return (
    <FooterWithOverlappedCta
      {...FooterWithOverlappedCta.PreviewProps}
      logoPosition={logoPosition}
      variant={componentVariant}
    />
  );
}

API Reference

PropTypeDefaultDescription
variantFooterWithOverlappedCtaVariant"content"Selects the lower layout
logoPosition"left" | "right""left"Mirrors supported layouts
themeEmailThemedefault themeEmail theme styling