Blocks

CTA Image Fan

A call-to-action section with a fanned photo stack and a shiny button.

A ready-made CTA block. A fanned photo stack auto-advances above the headline, then a shiny button invites the click. Built from Image Fan Slider and Shiny Button.

New tab
Team member one
Team member two
Team member three
Team member four
Team member five

Ready to accelerate Yourworkflow with AI?

Take the first step towards a more efficient and productive workflow.

Installation

pnpm dlx shadcn@latest add @tween-ui/cta-image-fan

Usage

app/page.tsx
app/page.tsx
import CtaImageFan from '@/components/tweenui/cta/cta-image-fan';
 
export default function Page() {
  return <CtaImageFan />;
}

Pass your own photos, copy, and click handler:

app/page.tsx
app/page.tsx
import CtaImageFan from '@/components/tweenui/cta/cta-image-fan';
 
export default function Page() {
  return (
    <CtaImageFan
      ctaLabel="Get started"
      onCtaClick={() => console.log('cta')}
      images={[
        { src: '/photos/one.jpg', alt: 'Portrait one' },
        { src: '/photos/two.jpg', alt: 'Portrait two' },
        { src: '/photos/three.jpg', alt: 'Portrait three' },
        { src: '/photos/four.jpg', alt: 'Portrait four' },
        { src: '/photos/five.jpg', alt: 'Portrait five' },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
images{ src, alt }[]5 sample photosPhotos in the fan. Five looks best.
titleReactNodesample headingHeading under the fan.
descriptionstringsample lineSupporting line under the heading.
ctaLabelstringTry for freeLabel on the shiny button.
onCtaClick() => void—Click handler for the CTA button.

Extends native <section> attributes (className, style, …).

Accessibility

Each photo keeps its alt text. The CTA is a real button. Under prefers-reduced-motion: reduce the fan holds on the first image and the button shine does not run.