A flowing quote stream where each avatar reveals its author on hover, with Motion fading and blurring the rest. React component.
Made by AxylHover any avatar to reveal the author while the rest of the quote stream blurs out.
| Prop | Type | Default |
|---|---|---|
testimonials? | Testimonial[] | - |
avatarSize? | number | 32 |
blurAmount? | number | 5 |
blurOpacity? | number | 0.25 |
fontSize? | number | 30 |
alternate? | InlineTestimonialsAlternateConfig | { pattern: true, opacity: 0.7 } |
interaction? | "hover" | "focus" | "both" | "hover" |
hoveredId? | string | null | - |
defaultHoveredId? | string | null | - |
onHoveredIdChange? | (id: string | null) => void | - |
renderAvatar? | (testimonial: Testimonial, size: number) => ReactNode | - |
label? | InlineTestimonialsLabelConfig | - |
className? | string | - |
classNames? | InlineTestimonialsClassNames | - |
InlineTestimonialsLabelConfig| Prop | Type | Default |
|---|---|---|
accentColor? | string | "#f97316" |
nameFontSize? | number | 12 |
roleFontSize? | number | 9 |
roleColor? | string | "var(--muted-foreground, #6b7280)" |
roleLetterSpacing? | string | "0.1em" |
roleUppercase? | boolean | true |
offsetX? | number | avatarSize / 2 |
offsetY? | string | "150%" |
slideX? | number | -6 |
transitionDuration? | number | 0.16 |
ease? | Easing | "easeOut" |
By default only mouse hover reveals the author label (interaction="hover"), matching a decorative quote stream. Set interaction="focus" or interaction="both" to also attach tabIndex and onFocus/onBlur to each item, making the label reachable by keyboard (Tab) and screen-reader focus.
When prefers-reduced-motion: reduce is set, useReducedMotion() disables the label's slide-in animation and the blur filter on dimmed items — only a plain opacity fade remains. No extra configuration needed.
The quote text is always in the DOM. The visible author label only mounts on hover/focus (via AnimatePresence), so each item also renders a sr-only "— Name, Role" string right after its quote — screen readers get the attribution unconditionally, without needing to trigger the hover/focus reveal.
Expandable Tabs
A pill-shaped tab bar that expands into a floating panel, with Motion driving the shell, label, and content transitions. React component.
Highlight
A shared Motion-powered highlight that slides between items on hover, or fades per-item on click. React component.
Built by Axyl. A motion-first component registry for React.
Last updated: 9/14/2026
Help keep SoraLabs moving.
Every contribution helps us build and maintain open-source tools for the community.
Sponsor on GitHub