import clsx from 'clsx';
import Image from '@/components/shared/Image';
import { GlowBg } from '@/components/shared/ui/glow-bg';
import { VideoPlayer } from '@/components/shared/VideoPlayer';
const LandingPrimaryCtaContent = ({
className,
childrenClassName,
textPosition = 'left',
title,
titleComponent,
description,
descriptionComponent,
leadingComponent,
children,
}: {
className?: string;
childrenClassName?: string;
textPosition?: 'center' | 'left';
title?: string | React.ReactNode;
titleComponent?: React.ReactNode;
description?: string | React.ReactNode;
descriptionComponent?: React.ReactNode;
leadingComponent?: React.ReactNode;
children?: React.ReactNode;
}) => {
return (
{leadingComponent}
{title ? (
{title}
) : (
titleComponent
)}
{description ? (
{description}
) : (
descriptionComponent
)}
{children}
);
};
/**
* A component meant to be used in the landing page as the primary Call to Action section.
*
* A section that shows a title, description and an image.
* Optionally, it can have actions (children), leading components and a background glow.
*/
export const LandingPrimaryImageCtaSection = ({
children,
className,
innerClassName,
title,
titleComponent,
description,
descriptionComponent,
leadingComponent,
footerComponent,
textPosition = 'left',
imageSrc,
imageAlt = '',
imagePosition = 'right',
imagePerspective = 'none',
imageShadow = 'hard',
minHeight = 350,
withBackground = false,
withBackgroundGlow = false,
variant = 'primary',
backgroundGlowVariant = 'primary',
effectComponent,
effectClassName,
}: {
children?: React.ReactNode;
className?: string;
innerClassName?: string;
title: string | React.ReactNode;
titleComponent?: React.ReactNode;
description?: string | React.ReactNode;
descriptionComponent?: React.ReactNode;
leadingComponent?: React.ReactNode;
footerComponent?: React.ReactNode;
textPosition?: 'center' | 'left';
imageSrc?: string;
imageAlt?: string;
imagePosition?: 'left' | 'right' | 'center';
imagePerspective?:
| 'none'
| 'left'
| 'right'
| 'bottom'
| 'bottom-lg'
| 'paper';
imageShadow?: 'none' | 'soft' | 'hard';
minHeight?: number;
withBackground?: boolean;
withBackgroundGlow?: boolean;
variant?: 'primary' | 'secondary';
backgroundGlowVariant?: 'primary' | 'secondary';
effectComponent?: React.ReactNode;
effectClassName?: string;
}) => {
return (
{effectComponent ? (
{effectComponent}
) : null}
{imageSrc && withBackgroundGlow ? (
) : null}
{children}
{imageSrc ? (
<>
{imagePosition === 'center' ? (
) : null}
{imagePosition === 'left' || imagePosition === 'right' ? (
) : null}
>
) : null}
{footerComponent}
);
};
/**
* A component meant to be used in the landing page as the primary Call to Action section.
*
* A section that shows a title, description and a video.
* Optionally, it can have actions (children), leading components and a background glow.
*/
export const LandingPrimaryVideoCtaSection = ({
children,
className,
innerClassName,
title,
titleComponent,
description,
descriptionComponent,
leadingComponent,
footerComponent,
textPosition = 'left',
videoSrc,
videoPoster,
videoPosition = 'right',
videoMaxWidth = 'none',
videoShadow = 'hard',
muted = true,
autoPlay = false,
controls = false,
loop = false,
minHeight = 350,
withBackground = false,
withBackgroundGlow = false,
variant = 'primary',
backgroundGlowVariant = 'primary',
effectComponent,
effectClassName,
}: {
children?: React.ReactNode;
className?: string;
innerClassName?: string;
title?: string | React.ReactNode;
titleComponent?: React.ReactNode;
description?: string | React.ReactNode;
descriptionComponent?: React.ReactNode;
leadingComponent?: React.ReactNode;
footerComponent?: React.ReactNode;
textPosition?: 'center' | 'left';
videoSrc?: string;
videoPoster?: string;
videoPosition?: 'left' | 'right' | 'center';
videoMaxWidth?: string;
videoShadow?: 'none' | 'soft' | 'hard';
muted?: boolean;
autoPlay?: boolean;
controls?: boolean;
loop?: boolean;
minHeight?: number;
withBackground?: boolean;
withBackgroundGlow?: boolean;
variant?: 'primary' | 'secondary';
backgroundGlowVariant?: 'primary' | 'secondary';
effectComponent?: React.ReactNode;
effectClassName?: string;
}) => {
return (
{effectComponent ? (
{effectComponent}
) : null}
{children}
{videoSrc ? (
<>
{withBackgroundGlow ? (
) : null}
{videoPosition === 'center' ? (
) : null}
{videoPosition === 'left' || videoPosition === 'right' ? (
) : null}
>
) : null}
{footerComponent}
);
};
/**
* A component meant to be used in the landing page as the primary Call to Action section.
*
* A section that shows a title & description.
* Optionally, it can have actions (children) and a background.
*/
export const LandingPrimaryTextCtaSection = ({
children,
className,
innerClassName,
title,
titleComponent,
description,
descriptionComponent,
leadingComponent,
footerComponent,
textPosition = 'center',
withBackground = false,
withBackgroundGlow = false,
variant = 'primary',
backgroundGlowVariant = 'primary',
effectComponent,
effectClassName,
}: {
children?: React.ReactNode;
className?: string;
innerClassName?: string;
title?: string | React.ReactNode;
titleComponent?: React.ReactNode;
description?: string | React.ReactNode;
descriptionComponent?: React.ReactNode;
leadingComponent?: React.ReactNode;
footerComponent?: React.ReactNode;
textPosition?: 'center' | 'left';
withBackground?: boolean;
withBackgroundGlow?: boolean;
variant?: 'primary' | 'secondary';
backgroundGlowVariant?: 'primary' | 'secondary';
effectComponent?: React.ReactNode;
effectClassName?: string;
}) => {
return (
{effectComponent ? (
{effectComponent}
) : null}
{withBackgroundGlow ? (
) : null}
{children}
{footerComponent}
);
};