Registry
Logo Cloud
A centered, muted row of logos.
<LogoCloud heading="Trusted by teams at">
<img src="/logos/acme.svg" alt="Acme" />
<img src="/logos/globex.svg" alt="Globex" />
<img src="/logos/initech.svg" alt="Initech" />
</LogoCloud>Installation
camp add logo-cloudOr with any shadcn-compatible CLI:
bunx shadcn@latest add https://campfire-deck.vercel.app/r/logo-cloud.jsonCopy the source into components/logo-cloud.tsx. It imports cn from
@/lib/utils — scaffolded by camp init, or camp add utils:
import type { ComponentProps } from "react";
import { cn } from "@/lib/utils";
export type LogoCloudProps = ComponentProps<"section"> & {
/** Optional uppercase eyebrow above the logos. */
heading?: string;
};
/** A centered, muted row of logos. */
export default function LogoCloud({
heading,
className,
children,
...props
}: LogoCloudProps) {
return (
<section
className={cn("flex flex-col gap-6", className)}
data-slot="logo-cloud"
{...props}
>
{heading ? (
<span
className="text-center text-sm uppercase tracking-[0.2em] opacity-50"
data-slot="logo-cloud-heading"
>
{heading}
</span>
) : null}
<div
className="flex flex-wrap items-center justify-center gap-x-14 gap-y-8 opacity-70 grayscale"
data-slot="logo-cloud-logos"
>
{children}
</div>
</section>
);
}Usage
Children are rendered in a wrapped, grayscale row — images, wordmarks, or any inline content work:
---
title: Customers
---
<LogoCloud heading="Trusted by teams at">
<img src="/logos/acme.svg" alt="Acme" />
<img src="/logos/globex.svg" alt="Globex" />
</LogoCloud>API Reference
Extends ComponentProps<"section"> — native props are forwarded and
className is merged last. Parts expose data-slot="logo-cloud",
logo-cloud-heading, and logo-cloud-logos.
Prop
Type