Skip to content
Facade UI
Colour mode
GitHub (opens in a new tab)
blockmotion

Logo cloud (motion)

Logo wall whose marks fade in one after another.

Wraps the static Logo cloud, which renders identically with JavaScript disabled.

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

Pulls in logo-cloud, motion-primitives. The CLI installs them for you.

Usage

The exact source of the preview above.

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

What the CLI copies into your project, byte for byte.

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">.