Skip to content
Facade UI
blockmotion

Logo cloud (motion)

The logo cloud, with logos fading in one after another.

Open in v0 (opens in a new tab)

This is the animated version of Logo cloud. The static version looks the same with JavaScript turned off.

Preview

Open full width (opens in a new tab)
Preview width

Installation

Package manager
pnpm dlx shadcn@latest add https://facadeui.dev/r/logo-cloud-motion.json

This component needs logo-cloud, motion-primitives. The CLI installs them for you.

Usage

This is the code for the preview above. To install it as a file, run npx shadcn@latest add @facade/logo-cloud-motion-demo.

demos/logo-cloud-motion.tsx
"use client"

/**
 * The `logo-cloud` demo, with the motion variant swapped in.
 *
 * Identical props: the motion variant only changes which slot components
 * the static section renders through.
 *
 * `"use client"` is required here, not incidental: the motion variant is a
 * client component, and icon components cannot cross a server-to-client
 * boundary as props. See the note on `IconComponent`.
 */

import { LogoCloudMotion } from "@registry/sections/logo-cloud-motion"

import { LOGOS } from "./content"

export function Demo() {
  return (
    <LogoCloudMotion
      title="Trusted by teams shipping every day"
      items={LOGOS}
      showNames
    />
  )
}

Source

These are the files the CLI copies into your project.

components/sections/logo-cloud-motion.tsx
"use client"

/**
 * LogoCloudMotion — the logo wall with a staggered entrance.
 *
 * A genuine wrapper: it renders the static `LogoCloud` and only swaps the list
 * slots for `Stagger` and `StaggerItem`. No markup, no styling and no
 * accessibility behaviour is duplicated, so the two variants cannot drift.
 *
 * a11y: the slots keep rendering `ul`/`li`, so list semantics survive the
 * wrapper, and the whole thing is inert under `prefers-reduced-motion`.
 *
 * Dependencies: react, @/components/motion/slots, @/components/sections/logo-cloud.
 */

import { StaggerList, StaggerListItem } from "@/components/motion/slots"
import { LogoCloud, type LogoCloudProps } from "@/components/sections/logo-cloud"

export type LogoCloudMotionProps = Omit<LogoCloudProps, "listAs" | "itemAs">

export function LogoCloudMotion(props: LogoCloudMotionProps) {
  return <LogoCloud {...props} listAs={StaggerList} itemAs={StaggerListItem} />
}

Props

LogoCloudMotionProps

Extends Omit<LogoCloudProps, "listAs" | "itemAs">.