"use client"; import Autoplay from "embla-carousel-autoplay"; import { ArrowRight, Blend, ChartNoAxesColumn, CircleDot, Diamond, } from "lucide-react"; import { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; import type { CarouselApi } from "@/components/ui/carousel"; import { Carousel, CarouselContent, CarouselItem, } from "@/components/ui/carousel"; import type { HeroFeatureIconsProps, Image } from "@/lib/hero-feature-icons"; import { cn } from "@/lib/utils"; const DEFAULT_FEATURES = [ { title: "گردش‌کارهای سفارشی", description: "پیشرفت را در جریان‌های کاری سفارشی تیم خود دنبال کنید.", icon: CircleDot, }, { title: "نقاط عطف", description: "پروژه‌ها را به فازهای مشخص تقسیم کنید.", icon: Diamond, }, { title: "پروژه‌های بین‌تیمی", description: "همکاری بین تیم‌ها و بخش‌ها.", icon: Blend, }, { title: "بینش پیشرفت", description: "دامنه، سرعت و پیشرفت را در طول زمان رصد کنید.", icon: ChartNoAxesColumn, }, ]; type HeroImage = Image & { label?: string }; const DEFAULT_IMAGES: [HeroImage, ...HeroImage[]] = [ { src: "/block-media/shadcnblocks/block/placeholder-1.svg", alt: "تصویر نمونه", label: "کانبان", }, { src: "/block-media/shadcnblocks/block/placeholder-2.svg", alt: "تصویر نمونه", label: "مسائل", }, { src: "/block-media/shadcnblocks/block/placeholder-3.svg", alt: "تصویر نمونه", label: "افزودن مسئله", }, ]; const Hero187 = ({ heading = "مجموعه بلاک‌های آماده رابط کاربری", description = "صدها بلاک و کامپوننت آماده مبتنی بر رابط کاربری، استایل‌دهی مدرن و ری یو آی که مستقیماً در پروژه‌های شما قابل استفاده هستند.", buttonPrimary = { text: "شروع رایگان", href: "#" }, buttonSecondary = { text: "مستندات", href: "#" }, features = DEFAULT_FEATURES, images = DEFAULT_IMAGES, className, }: HeroFeatureIconsProps) => { const [currentSlide, setCurrentSlide] = useState(0); const [api, setApi] = useState(); useEffect(() => { if (!api) { return; } api.on("select", () => { setCurrentSlide(api.selectedScrollSnap()); }); }, [api]); const activeImages = images ?? DEFAULT_IMAGES; return (
{/* Gradient border */}
{/* Left side - Content */}

{heading}

{description}

{/* Features */}
{features?.map((feature) => { const Icon = feature.icon; return (

{feature.title}

{feature.description}

); })}
{buttonPrimary && ( )} {buttonSecondary && ( )}
{/* Outer-edge carousel: bleed with -me so RTL/LTR both extend away from copy */}
{activeImages.map((image, index) => ( {image.alt} ))}
); }; interface SlideIndicatorProps { currentSlide: number; images: HeroImage[]; className?: string; api: CarouselApi | null; } const SlideIndicator = ({ currentSlide, images, className, api, }: SlideIndicatorProps) => { return (
{currentSlide + 1} از {images.length} {" "} {images[currentSlide].label}
{images.map((_, index) => (
); }; export { Hero187 };