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 ? ( ) : null} {imageSrc && withBackgroundGlow ? (
) : null}
{children} {imageSrc ? ( <> {imagePosition === 'center' ? (
{imageAlt}
) : null} {imagePosition === 'left' || imagePosition === 'right' ? ( {imageAlt} ) : 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 ? ( ) : 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 ? ( ) : null} {withBackgroundGlow ? (
) : null}
{children}
{footerComponent}
); };