plano/apps/www/src/components/LogoCloud.tsx

70 lines
2.3 KiB
TypeScript
Raw Normal View History

feat: redesign archgw -> plano + website in Next.js (#613) * feat: redesign archgw -> plano + website * feat(www): refactor landing page sections, add new diagrams and UI improvements * feat(www): sections enhanced for clarify & diagrams added * feat(www): improvements to mobile design, layout of diagrams * feat(www): clean + typecheck * feat(www): feedback loop changes * feat(www): fix type error * fix lib/utils error * feat(www): ran biome formatting * feat(www): graphic changes * feat(www): web analytics * fea(www): changes * feat(www): introduce monorepo This change brings Turborepo monorepo to independently handle the marketing website, the docs website and any other future use cases for mutli-platform support. They are using internal @katanemo package handlers for the design system and logic. * fix(www): transpiler failure * fix(www): tsconfig issue * fix(www): next.config issue * feat(docs): hold off on docs * Delete next.config.ts * feat(www): content fix * feat(www): introduce blog * feat(www): content changes * Update package-lock.json * feat: update text * Update IntroSection.tsx * feat: Turbopack issue * fix * Update IntroSection.tsx * feat: updated Research page * refactor(www): text clarity, padding adj. * format(www) * fix: add missing lib/ files to git - fixes Vercel GitHub deployment - Updated .gitignore to properly exclude Python lib/ but include Next.js lib/ directories - Added packages/ui/src/lib/utils.ts (cn utility function) - Added apps/www/src/lib/sanity.ts (Sanity client configuration) - Fixes module resolution errors in Vercel GitHub deployments (case-sensitive filesystem) * Update .gitignore * style(www): favicon + metadata * fix(www): links * fix(www): add analytics * fix(www): add * fix(www): fix links + image * fix(www): fix links + image * fix(www): fix links * fix(www): remove from tools testing.md
2025-12-18 15:55:15 -08:00
import React from "react";
import Image from "next/image";
const customerLogos = [
{
name: "HuggingFace",
src: "/logos/huggingface.svg",
},
{
name: "T-Mobile",
src: "/logos/tmobile.svg",
},
{
name: "HP",
src: "/logos/hp.svg",
},
{
name: "SanDisk",
src: "/logos/sandisk.svg",
},
{
name: "Chase",
src: "/logos/chase.svg",
},
];
export function LogoCloud() {
return (
<section className="relative py-6 sm:py-8 px-4 sm:px-6 lg:px-8 bg-transparent">
<div className="max-w-[81rem] mx-auto">
<div className="grid grid-cols-2 md:grid-cols-3 lg:flex lg:flex-row lg:justify-center lg:items-center gap-4 sm:gap-6 md:gap-8 lg:gap-0 place-items-center">
{customerLogos.map((logo, index) => {
const isLast = index === customerLogos.length - 1;
const isTMobile = index === 1; // T-Mobile is before HP
const isHP = index === 2; // HP is in center
const isSanDisk = index === 3; // SanDisk is after HP
// Custom spacing for logos around HP on large screens
let spacingClass = "lg:mx-6 xl:mx-8"; // Default spacing
if (isTMobile) {
spacingClass = "lg:mr-3 xl:mr-4 lg:ml-6 xl:ml-8"; // Smaller gap to HP
} else if (isHP) {
spacingClass = "lg:mx-3 xl:mx-4"; // Smaller gaps on both sides
} else if (isSanDisk) {
spacingClass = "lg:ml-3 xl:ml-4 lg:mr-6 xl:mr-8"; // Smaller gap from HP
}
return (
<div
key={logo.name}
className={`flex items-center justify-center opacity-60 hover:opacity-80 transition-opacity duration-300 w-full max-w-32 sm:max-w-40 md:max-w-48 h-10 sm:h-12 md:h-16 mx-auto ${spacingClass} ${
isLast ? "col-span-2 md:col-span-3 lg:col-span-none" : ""
}`}
>
<Image
src={logo.src}
alt={`${logo.name} logo`}
width={128}
height={40}
className="w-full h-full object-contain filter grayscale hover:grayscale-0 transition-all duration-300"
/>
</div>
);
})}
</div>
</div>
</section>
);
}