Skip to content

Components / Sections

Sticker Cloud

Who it is for, as stickers: a heading and a line beside a cloud of rounded labels in the palette's blocks, each tilted a little its own way, coming in one after another as the cloud enters the screen (Reveal). A clientele, the kinds of event a venue hosts, the cuisines a kitchen cooks. The labels are a list, read in order and named by the heading. Zero JavaScript of its own.

Live demo

Sample clients

Who it works with

Businesses where the look of the place is part of what people pay for.

  • Restaurants
  • Cafés
  • Villas
  • Beach clubs
  • Spas
  • Boutiques

Live, from the library itself, at full size: scroll, hover, navigate away and back. The demo is never gated.

Variants · each row writes the attribute the prop writes; the section's own CSS answers

tone
density

Measured

JavaScript of its own

0 B

Uses Reveal and the shared runtime (1.9 kB raw, once per site). With those included: 3.0 kB raw.

CSS 12.0 kB raw including the base tokens. Measured from a production build, and again in CI for every change that can move it.

Browser support

Baseline · widely available

Chrome 105 · Firefox 110 · Safari 16; needs container-units.

Install Pro

The demo above is never gated; the source is. With a key in components.json (see account), the registry serves it like any other item:

terminal
npx shadcn@latest add @moonarc-pro/sticker-cloud
src/pages/index.astro
---
import StickerCloud from '@/components/moonarc/pro/StickerCloud.astro';
---
<StickerCloud
  eyebrow="Clients"
  headline="Who we work with"
  copy="Businesses where the look of the place is part of what people pay for."
  items={['Restaurants', 'Cafés', 'Villas', 'Beach clubs', 'Spas', 'Boutiques']}
/>

Without a key the registry answers 401 with an upgrade message. Everything this section composes is free: reveal.

Props

PropTypeDefaultDescription
itemsstring[]noneThe labels, in order.
eyebrowstringnoneA short line above the heading.
headlinestringnoneThe heading; it names the list. Slot "headline" wins and may hold an <em>.
copystringnoneA line under the heading. Slot "copy" wins.
blocks(1 | 2 | 3 | 4 | 5)[][1, 2, 3, 4, 5]The blocks the stickers take in turn.
tiltsnumber[][-3, 2, -1.5, 3, -2.5, 1.5]The tilts the stickers take in turn, in degrees.
labelstringnoneAccessible name of the list; unset, the heading names it.
level2 | 32Heading level.
tone'surface' | 'muted' | 'ink' | 'brand'unset (paints nothing)The section's ground; the stickers keep their blocks.
density'compact' | 'cozy' | 'roomy''cozy'Block padding ×0.8 / ×1 / ×1.25 through --ma-density.

Theming and overrides

The section reads the theme contract (shadcn's variable names with the base tokens as fallback), so a pasted theme or one --ma-brand recolours it. Its class names are the override surface and stay stable; a named slot replaces the matching prop with your own markup.

Classes

.ma-stickers.ma-stickers__copy.ma-stickers__eyebrow.ma-stickers__head.ma-stickers__headline.ma-stickers__inner.ma-stickers__list.ma-stickers__sticker

Slots

slot="eyebrow"slot="headline"slot="copy"

Reduced motion

The stickers are in place, tilted, with no entrance.

With ClientRouter

Inherits Reveal; nothing of its own to rebind.

Why it is built this way

Replaces: Tag clouds (Framer templates). See the migration table.

Entrance on scroll that plays once and stays, staggers its children, scrubs with the scroll position when asked, honours reduced motion, and keeps working after every ClientRouter navigation.

every browserscroll

What is on offer, as colour blocks: each card paints one of the palette's blocks and carries a drawing in its corner (Motif), an index, a name, a line, chips for what it includes and a foot with a price and a round arrow.

newly · Chrome 105 · Firefox 121 · Safari 15.4hover

A "trusted by" section: a heading, a strip of greyscale logos drifting past that colour up on hover, and optionally the same logos as a hairline grid revealed with a stagger.

every browseralwaysscroll

Also: view transitions · how costs are measured · browser support · accessibility policy · five-minute setup · MCP for agents · this page as Markdown