Skip to content
Facade UI
blockmotion

USP list (motion)

The USP list, with items appearing one after another.

Open in v0 (opens in a new tab)

This is the animated version of USP list. 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/usp-list-motion.json

This component needs motion-primitives, usp-list. 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/usp-list-motion-demo.

demos/usp-list-motion.tsx
"use client"

/**
 * The `usp-list` 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 { UspListMotion } from "@registry/sections/usp-list-motion"

import { USPS } from "./content"

export function Demo() {
  return (
    <UspListMotion
      eyebrow="Why"
      title="Three things that matter"
      description="Code quality, accessibility and composability are the product."
      items={USPS}
    />
  )
}

Source

These are the files the CLI copies into your project.

components/sections/usp-list-motion.tsx
"use client"

/**
 * UspListMotion — the USP strip with a staggered entrance.
 *
 * Swaps only the list slots on the static `UspList`; everything visual and every
 * accessibility decision stays in that one file.
 *
 * Dependencies: react, @/components/motion/slots, @/components/sections/usp-list.
 */

import { StaggerList, StaggerListItem } from "@/components/motion/slots"
import { UspList, type UspListProps } from "@/components/sections/usp-list"

export type UspListMotionProps = Omit<UspListProps, "listAs" | "itemAs">

export function UspListMotion(props: UspListMotionProps) {
  return <UspList {...props} listAs={StaggerList} itemAs={StaggerListItem} />
}

Props

UspListMotionProps

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