import React from 'react' import { Quote } from 'lucide-react' import { Avatar, AvatarFallback, AvatarImage } from '@/core/components/ui/avatar' import { cn } from '@/core/lib/utils' import { buildSectionClasses, resolveMediaUrl } from '@/core/types/blocks' import type { TestimonialsBlockProps, TestimonialItem } from './schema' /** * Testimonials Block Component * * Props from 3-tab structure: * - Content: title, content, cta, items * - Design: backgroundColor, columns * - Advanced: className, id */ export function TestimonialsBlock({ // Base content props title, content, cta, // Testimonials-specific content items, // Base design props backgroundColor = 'gray-50', // Testimonials-specific design columns = '3', // Base advanced props className, id, }: TestimonialsBlockProps) { // Build column classes based on columns prop const columnClasses: Record = { '2': '@md:grid-cols-2', '3': '@md:grid-cols-2 @lg:grid-cols-3', } // Build section classes with background and custom className const sectionClasses = buildSectionClasses( 'py-16 px-4 @md:py-24', { backgroundColor, className } ) // Ensure items is always an array const safeItems = Array.isArray(items) ? items : [] return (
{/* Section Header */} {(title || content) && (
{title && (

{title}

)} {content && (

{content}

)}
)} {/* Testimonials Grid */}
{safeItems.map((item: TestimonialItem, index: number) => (
"{item.quote}"
{item.author.split(' ').map((n: string) => n[0]).join('')}
{item.author}
{item.role && (
{item.role}
)}
))}
{/* Optional CTA */} {cta && (
{cta.text}
)}
) }