Testimonial 10



<section id="relume" class="overflow-hidden px-[5%] py-16 md:py-24 lg:py-28">
<div class="container">
<div class="relative overflow-hidden" role="region" aria-roledescription="carousel">
<div class="relative pb-12 md:pb-16 lg:px-8">
<div>
<div class="flex ml-0">
<div
role="group"
aria-roledescription="slide"
class="min-w-0 shrink-0 grow-0 basis-full pl-0 md:px-16 lg:px-6"
>
<div
class="mx-auto flex h-full max-w-lg flex-col items-center justify-center text-center"
>
<div class="mb-6 flex md:mb-8">
<svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path>
</svg>
</div>
<blockquote class="text-xl font-bold md:text-2xl">
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius
enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor
interdum nulla, ut commodo diam libero vitae erat."
</blockquote>
<div
class="mt-6 flex w-full flex-col items-center gap-3 text-center md:mt-8 md:w-auto md:flex-row md:gap-5 md:text-left"
>
<div>
<img
src="https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg"
alt="Testimonial avatar 1"
class="size-14 min-h-14 min-w-14 rounded-full object-cover"
/>
</div>
<div class="mb-4 md:mb-0">
<p class="font-semibold">Name Surname</p>
<p>Position, Company name</p>
</div>
<div class="hidden w-px self-stretch bg-background-alternative md:block"></div>
<div>
<img
src="https://d22po4pjz3o32e.cloudfront.net/webflow-logo.svg"
alt="Webflow logo 1"
class="max-h-12"
/>
</div>
</div>
</div>
</div>
<div
role="group"
aria-roledescription="slide"
class="min-w-0 shrink-0 grow-0 basis-full pl-0 md:px-16 lg:px-6"
>
<div
class="mx-auto flex h-full max-w-lg flex-col items-center justify-center text-center"
>
<div class="mb-6 flex md:mb-8">
<svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path></svg
><svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M21.947 9.179a1.001 1.001 0 0 0-.868-.676l-5.701-.453-2.467-5.461a.998.998 0 0 0-1.822-.001L8.622 8.05l-5.701.453a1 1 0 0 0-.619 1.713l4.213 4.107-1.49 6.452a1 1 0 0 0 1.53 1.057L12 18.202l5.445 3.63a1.001 1.001 0 0 0 1.517-1.106l-1.829-6.4 4.536-4.082c.297-.268.406-.686.278-1.065z"
></path>
</svg>
</div>
<blockquote class="text-xl font-bold md:text-2xl">
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius
enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor
interdum nulla, ut commodo diam libero vitae erat."
</blockquote>
<div
class="mt-6 flex w-full flex-col items-center gap-3 text-center md:mt-8 md:w-auto md:flex-row md:gap-5 md:text-left"
>
<div>
<img
src="https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg"
alt="Testimonial avatar 1"
class="size-14 min-h-14 min-w-14 rounded-full object-cover"
/>
</div>
<div class="mb-4 md:mb-0">
<p class="font-semibold">Name Surname</p>
<p>Position, Company name</p>
</div>
<div class="hidden w-px self-stretch bg-background-alternative md:block"></div>
<div>
<img
src="https://d22po4pjz3o32e.cloudfront.net/webflow-logo.svg"
alt="Webflow logo 1"
class="max-h-12"
/>
</div>
</div>
</div>
</div>
</div>
</div>
<button
class="focus-visible:ring-border-primary gap-3 items-center justify-center whitespace-nowrap ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-border-primary text-text-primary absolute size-14 rounded-full bg-neutral-white left-0 top-1/2 -translate-y-1/2 hidden md:flex md:size-14"
disabled=""
>
<svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M12.707 17.293 8.414 13H18v-2H8.414l4.293-4.293-1.414-1.414L4.586 12l6.707 6.707z"
></path></svg
><span class="sr-only">Previous slide</span></button
><button
class="focus-visible:ring-border-primary gap-3 items-center justify-center whitespace-nowrap ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-border-primary text-text-primary absolute size-14 rounded-full bg-neutral-white right-0 top-1/2 -translate-y-1/2 hidden md:flex md:size-14"
disabled=""
>
<svg
stroke="currentColor"
fill="currentColor"
stroke-width="0"
viewBox="0 0 24 24"
class="size-6"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="m11.293 17.293 1.414 1.414L19.414 12l-6.707-6.707-1.414 1.414L15.586 11H6v2h9.586z"
></path></svg
><span class="sr-only">Next slide</span>
</button>
<div class="absolute bottom-0 left-0 right-0 z-20 flex h-7 justify-center pt-2.5">
<button
class="relative mx-[3px] inline-block size-2 rounded-full bg-neutral-darker/40"
></button
><button
class="relative mx-[3px] inline-block size-2 rounded-full bg-neutral-darker/40"
></button>
</div>
</div>
</div>
</div>
</section>
"use client";
import React from "react";
import type { CarouselApi } from "@relume_io/relume-ui";
import { useState, useEffect } from "react";
import clsx from "clsx";
import { BiSolidStar } from "react-icons/bi";
import {
Carousel,
CarouselContent,
CarouselItem,
CarouselNext,
CarouselPrevious,
} from "@relume_io/relume-ui";
type ImageProps = {
src: string;
alt?: string;
};
type Testimonial = {
numberOfStars: number;
quote: string;
avatar: ImageProps;
name: string;
position: string;
logo: ImageProps;
};
type Props = {
testimonials: Testimonial[];
};
export type Testimonial10Props = React.ComponentPropsWithoutRef<"section"> & Partial<Props>;
export const Testimonial10 = (props: Testimonial10Props) => {
const { testimonials } = {
...Testimonial10Defaults,
...props,
};
const [api, setApi] = useState<CarouselApi>();
const [current, setCurrent] = useState(0);
useEffect(() => {
if (!api) {
return;
}
setCurrent(api.selectedScrollSnap() + 1);
api.on("select", () => {
setCurrent(api.selectedScrollSnap() + 1);
});
}, [api]);
return (
<section id="relume" className="overflow-hidden px-[5%] py-16 md:py-24 lg:py-28">
<div className="container">
{/* for all available options: https://www.embla-carousel.com/api/options/ */}
<Carousel
setApi={setApi}
opts={{
loop: true,
align: "start",
}}
className="overflow-hidden"
>
<div className="relative pb-12 md:pb-16 lg:px-8">
<CarouselContent className="ml-0">
{testimonials.map((testimonial, index) => (
<CarouselItem key={index} className="pl-0 md:px-16 lg:px-6">
<TestimonialCard testimonial={testimonial} />
</CarouselItem>
))}
</CarouselContent>
<CarouselPrevious className="hidden md:flex md:size-14" />
<CarouselNext className="hidden md:flex md:size-14" />
<div className="absolute bottom-0 left-0 right-0 z-20 flex h-7 justify-center pt-2.5">
{testimonials.map((_, index) => (
<button
key={index}
onClick={() => api?.scrollTo(index)}
className={clsx("relative mx-[3px] inline-block size-2 rounded-full", {
"bg-black": current === index + 1,
"bg-neutral-darker/40": current !== index + 1,
})}
/>
))}
</div>
</div>
</Carousel>
</div>
</section>
);
};
const TestimonialCard = ({ testimonial }: { testimonial: Testimonial }) => {
return (
<div className="mx-auto flex h-full max-w-lg flex-col items-center justify-center text-center">
<div className="mb-6 flex md:mb-8">
{Array(testimonial.numberOfStars)
.fill(null)
.map((_, starIndex) => (
<BiSolidStar key={starIndex} className="size-6" />
))}
</div>
<blockquote className="text-xl font-bold md:text-2xl">{testimonial.quote}</blockquote>
<div className="mt-6 flex w-full flex-col items-center gap-3 text-center md:mt-8 md:w-auto md:flex-row md:gap-5 md:text-left">
<div>
<img
src={testimonial.avatar.src}
alt={testimonial.avatar.alt}
className="size-14 min-h-14 min-w-14 rounded-full object-cover"
/>
</div>
<div className="mb-4 md:mb-0">
<p className="font-semibold">{testimonial.name}</p>
<p>{testimonial.position}</p>
</div>
<div className="hidden w-px self-stretch bg-background-alternative md:block" />
<div>
<img src={testimonial.logo.src} alt={testimonial.logo.alt} className="max-h-12" />
</div>
</div>
</div>
);
};
const testimonial = {
numberOfStars: 5,
quote:
'"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat."',
avatar: {
src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg",
alt: "Testimonial avatar 1",
},
name: "Name Surname",
position: "Position, Company name",
logo: {
src: "https://d22po4pjz3o32e.cloudfront.net/webflow-logo.svg",
alt: "Webflow logo 1",
},
};
export const Testimonial10Defaults: Props = {
testimonials: [testimonial, testimonial],
};
Need help?
For installation guidelines and API information, visit the docs.
Examples
No items found.