--- /** * Shared Team Section component * Displays team/board members in a responsive grid with avatar, name, role, and optional bio. */ import Container from '../atoms/Container.astro'; import SectionHeader from '../atoms/SectionHeader.astro'; import Card from '../atoms/Card.astro'; interface TeamMember { name: string; role: string; image?: string; bio?: string; } interface Props { title: string; subtitle?: string; members: TeamMember[]; columns?: 2 | 3 | 4; class?: string; id?: string; } const { title, subtitle, members, columns = 3, class: className = '', id } = Astro.props; const gridCols = { 2: 'md:grid-cols-2', 3: 'md:grid-cols-2 lg:grid-cols-3', 4: 'md:grid-cols-2 lg:grid-cols-4', }; function getInitials(name: string): string { return name .split(' ') .map((part) => part[0]) .join('') .toUpperCase() .slice(0, 2); } ---
{ members.map((member) => (
{member.image ? ( {member.name} ) : (
{getInitials(member.name)}
)}

{member.name}

{member.role}

{member.bio && (

{member.bio}

)}
)) }