163 lines
4.1 KiB
TypeScript
163 lines
4.1 KiB
TypeScript
"use client";
|
|
|
|
import Marquee from "react-fast-marquee";
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
interface Company {
|
|
name: string;
|
|
logo: string;
|
|
href?: string;
|
|
}
|
|
|
|
interface Logos17Props {
|
|
heading?: string;
|
|
subheading?: string;
|
|
topRowCompanies?: Company[];
|
|
bottomRowCompanies?: Company[];
|
|
className?: string;
|
|
}
|
|
|
|
const Logos17 = ({
|
|
heading = "پشتوانه بهترین تیمهای محصول جهان.",
|
|
subheading = "از استارتاپهای نسل جدید تا شرکتهای تثبیتشده.",
|
|
topRowCompanies = [
|
|
{
|
|
name: "Mercury",
|
|
logo: "/block-media/shadcnblocks/block/logos/mercury.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Watershed",
|
|
logo: "/block-media/shadcnblocks/block/logos/watershed.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Retool",
|
|
logo: "/block-media/shadcnblocks/block/logos/retool.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Descript",
|
|
logo: "/block-media/shadcnblocks/block/logos/descript.svg",
|
|
href: "#",
|
|
},
|
|
],
|
|
bottomRowCompanies = [
|
|
{
|
|
name: "Perplexity",
|
|
logo: "/block-media/shadcnblocks/block/logos/perplexity.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Monzo",
|
|
logo: "/block-media/shadcnblocks/block/logos/monzo.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Ramp",
|
|
logo: "/block-media/shadcnblocks/block/logos/ramp.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Raycast",
|
|
logo: "/block-media/shadcnblocks/block/logos/raycast.svg",
|
|
href: "#",
|
|
},
|
|
{
|
|
name: "Arc",
|
|
logo: "/block-media/shadcnblocks/block/logos/arc.svg",
|
|
href: "#",
|
|
},
|
|
],
|
|
className,
|
|
}: Logos17Props) => {
|
|
return (
|
|
<section
|
|
dir="rtl"
|
|
lang="fa"
|
|
className={cn("overflow-hidden pb-28 lg:pb-32", className)}
|
|
>
|
|
<div className="container space-y-10 lg:space-y-16">
|
|
<div className="text-center">
|
|
<h2 className="mb-4 text-xl text-balance md:text-xl lg:text-3xl">
|
|
{heading}
|
|
<br className="max-md:hidden" />
|
|
<span className="text-muted-foreground">{subheading}</span>
|
|
</h2>
|
|
</div>
|
|
|
|
<div className="flex w-full flex-col items-center gap-8">
|
|
{/* Top row - 4 logos */}
|
|
<LogoRow
|
|
companies={topRowCompanies}
|
|
gridClassName="grid-cols-4"
|
|
direction="right"
|
|
/>
|
|
|
|
{/* Bottom row - 5 logos */}
|
|
<LogoRow
|
|
companies={bottomRowCompanies}
|
|
gridClassName="grid-cols-5"
|
|
direction="left"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|
|
|
|
interface LogoRowProps {
|
|
companies: Company[];
|
|
gridClassName: string;
|
|
direction?: "left" | "right";
|
|
}
|
|
|
|
const LogoRow = ({ companies, gridClassName, direction }: LogoRowProps) => {
|
|
return (
|
|
<>
|
|
{/* Desktop static version */}
|
|
<div className="hidden md:block">
|
|
<div
|
|
className={cn(
|
|
"grid items-center justify-items-center gap-x-20 lg:gap-x-28",
|
|
gridClassName,
|
|
)}
|
|
>
|
|
{companies.map((company, index) => (
|
|
<a href={company.href || "#"} target="_blank" key={company.logo}>
|
|
<img
|
|
src={company.logo}
|
|
alt={`لوگوی ${company.name}`}
|
|
className="h-8 w-auto object-contain opacity-50 transition-opacity hover:opacity-70 dark:invert"
|
|
/>
|
|
</a>
|
|
))}
|
|
</div>
|
|
</div>
|
|
|
|
{/* Mobile marquee version */}
|
|
<div className="md:hidden">
|
|
<Marquee direction={direction} pauseOnHover>
|
|
{companies.map((company, index) => (
|
|
<a
|
|
href={company.href || "#"}
|
|
target="_blank"
|
|
key={company.logo}
|
|
className="mx-8 inline-block transition-opacity hover:opacity-70"
|
|
>
|
|
<img
|
|
src={company.logo}
|
|
alt={`لوگوی ${company.name}`}
|
|
className="h-8 w-auto object-contain"
|
|
/>
|
|
</a>
|
|
))}
|
|
</Marquee>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export { Logos17 };
|