Logo Cloud
Logo cloud section component for home block.
Installation
This component is part of the Home block. Install the full block to use it:
CLI
npx shadcn@latest add "https://ui.xaclabs.dev/r/home.json"Usage
import { LogoCloud } from "@/registry/blocks/home/components/home-logo-cloud"View component source
home-logo-cloud.tsx
tsx"use client"
import { motion } from "motion/react"
import * as React from "react"
import { cn } from "@/lib/utils"
import { Container } from "@/registry/components/container"
export interface LogoItem {
name: string
src: string
href?: string
}
export interface LogoCloudProps {
title?: string
description?: string
logos: LogoItem[]
className?: string
}
export function LogoCloud({
title,
description,
logos,
className,
}: LogoCloudProps) {
return (
<Container className={cn("py-20", className)}>
{(title || description) && (
<div className="mb-8 text-center">
{title && (
<h2 className="text-2xl font-bold tracking-tight">{title}</h2>
)}
{description && (
<p className="mt-2 text-muted-foreground">{description}</p>
)}
</div>
)}
<div className="flex flex-wrap items-center justify-center gap-8 md:gap-12">
{logos.map((logo, i) => {
const content = (
<motion.div
initial={{ opacity: 0, y: 10 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.3, delay: i * 0.05 }}
className="flex items-center justify-center grayscale opacity-70 transition-all hover:grayscale-0 hover:opacity-100"
>
<img
src={logo.src}
alt={logo.name}
className="h-8 w-auto object-contain md:h-10 dark:invert"
/>
</motion.div>
)
if (logo.href) {
return (
<a
key={logo.name}
href={logo.href}
target="_blank"
rel="noopener noreferrer"
>
{content}
</a>
)
}
return <React.Fragment key={logo.name}>{content}</React.Fragment>
})}
</div>
</Container>
)
}