Logo Cloud One
The Logo Cloud One block is a simple, composable logo cloud section that displays a series of brand or partner logos in an auto-scrolling carousel. It loops continuously, pausing on hover or focus for accessibility.
import mockedLogoCloudBlock from "@/data/mock/optimizely/logo-cloud/logo-cloud-block.json";import { logoCloudCmsMappers } from "@/registry/rokkit200-ui/blocks/logo-cloud/internals/lib/logo-cloud-utils";import { LogoCloudOne } from "@/registry/rokkit200-ui/blocks/logo-cloud/variants/logo-cloud-one/logo-cloud-one";import { mapCmsType } from "@/registry/rokkit200-ui/lib/content-mapper/content-mapper-util";import { logoCloudBlockCodeModel, logoCloudBlockFragment } from "./constants";
export default function LogoCloudOneDefaultDemo() { const properties = mapCmsType( logoCloudCmsMappers, mockedLogoCloudBlock.data.LogoCloudBlock.item.Items );
return <LogoCloudOne {...properties!} />;}WIPquery HeroBlockQuery { HeroBlock { item { ...HeroBlockFragment } } }
fragment HeroBlockFragment on HeroBlock { Heading MainBody { json } Links { __typename url { type default hierarchical internal graph base __typename } target text title } Media { ... on ImageMedia { AltText _metadata { url { default } } _imageMetadata { width height } } } }Composition
Section titled “Composition”LogoCloudOne is assembled from the following components:
| Component | Role |
|---|---|
Carousel | Provides the auto-scrolling, looping slide behaviour |
ContentImage | Renders each logo with responsive <picture> support |
Shared internals (logo-cloud-internals) provide the LogoCloudProperties type, image profile, and CMS mapper utilities used by all logo cloud variants.
Below is an example of how to use LogoCloudOne in your site.
import { LogoCloudOne } from "@/rokkit200-ui/blocks/logo-cloud/variants/logo-cloud-one/logo-cloud-one";import { mapCmsType } from "@/rokkit200-ui/lib/content-mapper/content-mapper-util";import { logoCloudCmsMappers } from "@/rokkit200-ui/blocks/logo-cloud/internals/lib/logo-cloud-utils";const properties = mapCmsType(logoCloudCmsMappers, logoCloudResponse);
return <LogoCloudOne {...properties!} />;Customisation
Section titled “Customisation”All visual customisation is done via className props — pass Tailwind classes to adjust media styling. No additional CSS or theme tokens are required.
Grayscale
Section titled “Grayscale”Desaturate logos by default and restore colour on hover, useful for keeping the section visually subdued until a user interacts.
import mockedLogoCloudBlock from "@/data/mock/optimizely/logo-cloud/logo-cloud-block.json";import { logoCloudCmsMappers } from "@/registry/rokkit200-ui/blocks/logo-cloud/internals/lib/logo-cloud-utils";import { LogoCloudOne } from "@/registry/rokkit200-ui/blocks/logo-cloud/variants/logo-cloud-one/logo-cloud-one";import { mapCmsType } from "@/registry/rokkit200-ui/lib/content-mapper/content-mapper-util";
export default function LogoCloudOneGrayscaleDemo() { const properties = mapCmsType( logoCloudCmsMappers, mockedLogoCloudBlock.data.LogoCloudBlock.item.Items );
return ( <LogoCloudOne {...properties!} mediaClassName="grayscale opacity-60 hover:grayscale-0 hover:opacity-100 transition-all duration-300" /> );}Rounded
Section titled “Rounded”Apply rounded corners and a subtle shadow to each logo image for a card-like presentation.
import mockedLogoCloudBlock from "@/data/mock/optimizely/logo-cloud/logo-cloud-block.json";import { logoCloudCmsMappers } from "@/registry/rokkit200-ui/blocks/logo-cloud/internals/lib/logo-cloud-utils";import { LogoCloudOne } from "@/registry/rokkit200-ui/blocks/logo-cloud/variants/logo-cloud-one/logo-cloud-one";import { mapCmsType } from "@/registry/rokkit200-ui/lib/content-mapper/content-mapper-util";
export default function LogoCloudOneRoundedDemo() { const properties = mapCmsType( logoCloudCmsMappers, mockedLogoCloudBlock.data.LogoCloudBlock.item.Items );
return ( <LogoCloudOne {...properties!} mediaClassName="rounded-2xl shadow-md" /> );}Bordered
Section titled “Bordered”Add a border and inner padding around each logo for a contained, tile-style layout.
import mockedLogoCloudBlock from "@/data/mock/optimizely/logo-cloud/logo-cloud-block.json";import { logoCloudCmsMappers } from "@/registry/rokkit200-ui/blocks/logo-cloud/internals/lib/logo-cloud-utils";import { LogoCloudOne } from "@/registry/rokkit200-ui/blocks/logo-cloud/variants/logo-cloud-one/logo-cloud-one";import { mapCmsType } from "@/registry/rokkit200-ui/lib/content-mapper/content-mapper-util";
export default function LogoCloudOneBorderedDemo() { const properties = mapCmsType( logoCloudCmsMappers, mockedLogoCloudBlock.data.LogoCloudBlock.item.Items );
return ( <LogoCloudOne {...properties!} mediaClassName="rounded-lg border border-slate-200 p-2 dark:border-slate-700" /> );}API Reference
Section titled “API Reference”LogoCloudOneProperties
Section titled “LogoCloudOneProperties”Extends LogoCloudProperties (from logo-cloud-internals).
| Prop | Type | Default | Description |
|---|---|---|---|
media | LogoCloudMedia[] | — | Array of image sources and profiles for each logo. |
className | string | — | Classes applied to the root <section> element. |
textContainerClassName | string | — | Classes applied to the text content wrapper. |
headingClassName | string | — | Classes applied to the heading element. |
bodyClassName | string | — | Classes applied to the body text wrapper. |
linksClassName | string | — | Classes applied to the links wrapper. |
mediaContainerClassName | string | — | Classes applied to the media container <div>. |
mediaClassName | string | — | Classes applied to each ContentImage element. |
Accessibility
Section titled “Accessibility”- The carousel auto-scrolls with
loopenabled, but pauses on mouse enter (stopOnMouseEnter) and on focus (stopOnFocusIn) so users are not forced to interact with moving content. - Logo images are rendered with
decorativeset, marking them as presentational. If logos require identification, provide meaningfulAltTextin the CMS data. - The carousel carries an
aria-labelof “Logo Cloud Carousel” for assistive technology.
Related Patterns
Section titled “Related Patterns”- Grouped Content — composing blocks into page sections.