2026-07-11 21:21:29 +03:30
"use client" ;
import type { LucideIcon } from "lucide-react" ;
import {
AudioLines ,
Captions ,
Eye ,
Languages ,
ListMinus ,
ScanFace ,
TextQuote ,
} from "lucide-react" ;
import { useRef } from "react" ;
import {
Card ,
CardContent ,
CardDescription ,
CardTitle ,
} from "@/components/ui/card" ;
import {
Carousel ,
CarouselContent ,
CarouselItem ,
CarouselNext ,
CarouselPrevious ,
} from "@/components/ui/carousel" ;
import { cn } from "@/lib/utils" ;
interface CarouselCardItem {
id : string ;
video : string ;
2026-07-26 18:44:54 +03:30
poster : string ;
2026-07-11 21:21:29 +03:30
Icon : LucideIcon ;
title : string ;
link : string ;
summary : string ;
}
const CARDS : CarouselCardItem [] = [
{
id : "design-system" ,
video : "/block-media/shadcnblocks/block/video-1.mp4" ,
2026-07-26 18:44:54 +03:30
poster : "/block-media/shadcnblocks/block/placeholder-1.svg" ,
2026-07-11 21:21:29 +03:30
Icon : Eye ,
title : "همکاری فروش و بازاریابی" ,
link : "#" ,
summary :
"دلایل از دست دادن معامله را تحلیل کنید و استراتژی فروش را بهبود دهید." ,
},
{
id : "framework-agnostic" ,
video : "/block-media/shadcnblocks/block/video-2.mp4" ,
2026-07-26 18:44:54 +03:30
poster : "/block-media/shadcnblocks/block/placeholder-2.svg" ,
2026-07-11 21:21:29 +03:30
Icon : Languages ,
title : "اولویتبندی سرنخ" ,
link : "#" ,
summary :
"با یادآورهای هوشمند و اولویتبندی سرنخ، زمان تیم روی معاملات با احتمال بیشتر صرف میشود و چرخه فروش کوتاهتر میشود." ,
},
{
id : "interactive" ,
2026-07-26 18:44:54 +03:30
video : "/block-media/shadcnblocks/block/landscape.mp4" ,
poster : "/block-media/shadcnblocks/block/placeholder-3.svg" ,
2026-07-11 21:21:29 +03:30
Icon : AudioLines ,
title : "قالب پیشنهاد فروش" ,
link : "#" ,
summary :
"چرخه فروش را از سرنخ تا قرارداد در یک مسیر مشخص پیش ببرید. مدیران میتوانند گلوگاهها را ببینند و تیمها با اولویت درست روی معاملات ارزشمند تمرکز کنند." ,
},
{
id : "minimal-setup" ,
2026-07-26 18:44:54 +03:30
video : "/block-media/shadcnblocks/block/video-1.mp4" ,
poster : "/block-media/shadcnblocks/block/placeholder-4.svg" ,
2026-07-11 21:21:29 +03:30
Icon : ListMinus ,
title : "ردیابی کووت" ,
link : "#" ,
summary :
"اهداف فردی و تیمی را شفاف تعریف کنید و پیشرفت را لحظهای ببینید." ,
},
{
id : "accessibility" ,
2026-07-26 18:44:54 +03:30
video : "/block-media/shadcnblocks/block/video-2.mp4" ,
poster : "/block-media/shadcnblocks/block/placeholder-5.svg" ,
2026-07-11 21:21:29 +03:30
Icon : ScanFace ,
title : "تحلیل باخت معامله" ,
link : "#" ,
summary :
"سرنخهای با بالاترین احتمال تبدیل را در بالای صف کار روزانه قرار دهید." ,
},
{
id : "documentation" ,
2026-07-26 18:44:54 +03:30
video : "/block-media/shadcnblocks/block/landscape.mp4" ,
poster : "/block-media/shadcnblocks/block/placeholder-6.svg" ,
2026-07-11 21:21:29 +03:30
Icon : TextQuote ,
title : "هدفگذاری تیمی" ,
link : "#" ,
summary :
"پیشنهادهای حرفهای را در چند دقیقه بسازید و زمان آمادهسازی را کم کنید." ,
},
{
id : "typescript" ,
2026-07-26 18:44:54 +03:30
video : "/block-media/shadcnblocks/block/video-1.mp4" ,
poster : "/block-media/shadcnblocks/block/placeholder-dark-1.svg" ,
2026-07-11 21:21:29 +03:30
Icon : Captions ,
title : "اتوماسیون پیگیری" ,
link : "#" ,
summary :
"وضعیت هر پیشنهاد را از ارسال تا امضا بدون پیگیری دستی دنبال کنید." ,
},
];
2026-07-26 18:44:54 +03:30
const CarouselCard = ({
video ,
poster ,
Icon ,
title ,
link ,
summary ,
} : CarouselCardItem ) => {
2026-07-11 21:21:29 +03:30
const videoRef = useRef < HTMLVideoElement | null >( null );
return (
< a
href = { link }
2026-07-26 18:44:54 +03:30
className = "group block h-full min-w-0"
2026-07-11 21:21:29 +03:30
onMouseEnter = {() => {
2026-07-26 18:44:54 +03:30
void videoRef . current ? . play ();
2026-07-11 21:21:29 +03:30
}}
onMouseLeave = {() => {
if ( videoRef . current ) {
videoRef . current . pause ();
videoRef . current . currentTime = 0 ;
}
}}
>
2026-07-26 18:44:54 +03:30
< Card className = "h-full min-h-0 min-w-0 gap-0 overflow-hidden rounded-xl border-0 bg-muted p-4 py-4! shadow-none ring-0 transition-all group-hover:shadow-md sm:min-h-[22rem] sm:p-6 lg:min-h-[24rem] lg:p-8" >
< CardContent className = "min-w-0 p-0" >
< div className = "relative min-w-0" >
< div className = "aspect-video w-full min-w-0 overflow-hidden rounded-lg bg-background" >
2026-07-11 21:21:29 +03:30
< video
ref = { videoRef }
2026-07-26 18:44:54 +03:30
className = "block size-full max-w-full object-cover object-center"
src = { video }
poster = { poster }
2026-07-11 21:21:29 +03:30
controls = { false }
muted
2026-07-26 18:44:54 +03:30
loop
playsInline
preload = "metadata"
2026-07-11 21:21:29 +03:30
aria-label = { title }
/>
2026-07-26 18:44:54 +03:30
</ div >
< div className = "absolute -start-1 -top-2 flex size-8 rounded-lg bg-primary sm:-start-2 sm:-top-3 sm:size-9 sm:rounded-[0.5rem]" >
2026-07-11 21:21:29 +03:30
< Icon className = "m-auto size-4 stroke-primary-foreground" />
</ div >
</ div >
2026-07-26 18:44:54 +03:30
< div className = "mt-6 flex min-w-0 flex-col gap-2 text-start sm:mt-8" >
< CardTitle className = "text-lg leading-[130%] font-normal tracking-[-0.48px] text-pretty text-foreground sm:text-xl" >
2026-07-11 21:21:29 +03:30
{ title }
</ CardTitle >
< CardDescription className = "text-sm leading-[150%] tracking-[-0.36px] text-pretty" >
{ summary }
</ CardDescription >
</ div >
</ CardContent >
</ Card >
</ a >
);
};
interface Feature215Props {
className? : string ;
}
const Feature215 = ({ className } : Feature215Props ) => {
return (
2026-07-26 18:44:54 +03:30
< section
dir = "rtl"
lang = "fa"
className = { cn (
"w-full max-w-full overflow-x-hidden py-20 sm:py-32" ,
className ,
)}
>
< div className = "container min-w-0 px-4 sm:px-6" >
< div className = "mx-auto mb-10 flex max-w-[47.5rem] flex-col gap-4 sm:mb-16 sm:gap-6" >
2026-07-11 21:21:29 +03:30
< h2 className = "text-center text-xl font-semibold text-balance xl:text-2xll" >
پیشبینی درآمد را دقیقتر کنید
</ h2 >
2026-07-26 18:44:54 +03:30
< p className = "text-center text-base text-pretty text-muted-foreground sm:text-lg md:text-xl" >
الگوهای موفق فروش را در کل سازمان تکرار کنید . داده لحظهای نشان
میدهد کدام مرحله بیشترین افت تبدیل را دارد .
2026-07-11 21:21:29 +03:30
</ p >
</ div >
2026-07-26 18:44:54 +03:30
2026-07-11 21:21:29 +03:30
< Carousel
opts = {{
align : "start" ,
direction : "rtl" ,
}}
2026-07-26 18:44:54 +03:30
className = "w-full min-w-0 max-w-full"
2026-07-11 21:21:29 +03:30
>
2026-07-26 18:44:54 +03:30
< CarouselContent className = "py-2 sm:py-4" >
2026-07-11 21:21:29 +03:30
{ CARDS . map (( item ) => (
< CarouselItem
key = { item . id }
2026-07-26 18:44:54 +03:30
className = "min-w-0 basis-[85%] sm:basis-1/2 lg:basis-1/3"
2026-07-11 21:21:29 +03:30
>
< CarouselCard { ...item } />
</ CarouselItem >
))}
</ CarouselContent >
2026-07-26 18:44:54 +03:30
< div className = "mt-6 flex w-full min-w-0 justify-center gap-3 sm:mt-8 sm:gap-4" >
< CarouselPrevious className = "static size-10 translate-y-0 sm:size-12 rtl:rotate-180" />
< CarouselNext className = "static size-10 translate-y-0 sm:size-12 rtl:rotate-180" />
2026-07-11 21:21:29 +03:30
</ div >
</ Carousel >
</ div >
</ section >
);
};
export { Feature215 };