Testimonial
A large Quote with its author, and everyone else who agrees as an overlapping AvatarGroup. Server-safe.
We replaced three bots with one dashboard. Mod log, clips and roles finally live in the same place.
- +2 more
and 2,400 other moderators
import { Testimonial } from "@/components/blocks/testimonial";const customers = [ "Wade Warren", "Esther Howard", "Guy Hawkins", "Robert Fox",].map((alt) => ({ alt }));export function CustomerQuote() { return ( <Testimonial author="Jane Cooper" subtitle="Head of Support, Northwind" avatar="/team/jane.png" others={customers} othersLabel="and 1,200 other teams" > We moved every ticket view into one dashboard and cut our reply time in half. </Testimonial> );}<Testimonial>
A large Quote carried by its author, with the crowd behind it as an AvatarGroup.
author*stringWho said it.
children*ReactNodeThe quote.
avatarstringAuthor photo URL; initials show without one.
langstringLanguage of the quote, e.g. "pl".
others{ alt: string; src?: string | undefined; id?: string | undefined; }[]Everyone else who agrees: the first few stack, the rest fold into
+N.othersLabelReactNodeLine beside the stack, e.g. "Trusted by 2,400 streamers".
subtitlestringLine under the author, e.g. role and company.
| Prop | Type | Default |
|---|---|---|
author*Who said it. | string | — |
children*The quote. | ReactNode | — |
avatarAuthor photo URL; initials show without one. | string | — |
langLanguage of the quote, e.g. "pl". | string | — |
othersEveryone else who agrees: the first few stack, the rest fold into | { alt: string; src?: string | undefined; id?: string | undefined; }[] | — |
othersLabelLine beside the stack, e.g. "Trusted by 2,400 streamers". | ReactNode | — |
subtitleLine under the author, e.g. role and company. | string | — |
* required. Every component also takes className.