Marketing
- Content
- Footer with Legal Text
- Company Locations Footer
- App Store Buttons Footer
- Background Image Footer
- Overlapped CTA Footer
- Large Title and Buttons Footer
- Full Menu Footer
- Centered with Menu and Socials
- 2-Column Menu
- 2-Column Menu and Divider
- Menu and Full-Width CTA
- 3-Column Menu
- Content and CTA
- Social Icons and Address
- Text, Menu and Socials
- Simple Footer with Social Icons
Ecommerce
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
Content — Right Logo
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}
/>
);
}2-Column Menu — Left Logo
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}
/>
);
}2-Column Menu — Right Logo
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}
/>
);
}3-Column Menu — Left Logo
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}
/>
);
}3-Column Menu — Right Logo
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}
/>
);
}Address — Left Logo
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}
/>
);
}Address — Right Logo
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
| Prop | Type | Default | Description |
|---|---|---|---|
variant | FooterWithOverlappedCtaVariant | "content" | Selects the lower layout |
logoPosition | "left" | "right" | "left" | Mirrors supported layouts |
theme | EmailTheme | default theme | Email theme styling |