import React, { useState } from "react"; import { clsx } from "clsx"; interface TeamMember { id: string; name: string; position: string; department: string; bio: string; avatar: string; skills: string[]; experience: string; email?: string; phone?: string; socialLinks: { linkedin?: string; twitter?: string; github?: string; portfolio?: string; }; achievements?: string[]; certifications?: string[]; } interface PlusTeamProps { title?: string; description?: string; teamMembers?: TeamMember[]; layout?: "grid" | "carousel" | "masonry"; showSkills?: boolean; showBio?: boolean; showSocial?: boolean; showModal?: boolean; groupByDepartment?: boolean; className?: string; theme?: { primaryColor?: string; secondaryColor?: string; accentColor?: string; fontFamily?: string; }; } const defaultTeamMembers: TeamMember[] = [ { id: "1", name: "김지영", position: "CEO & 설립자", department: "경영진", bio: "15년 이상의 기술 업계 경험을 바탕으로 혁신적인 솔루션을 제공하는 비전을 가지고 있습니다.", avatar: "/images/team/ceo.jpg", skills: ["전략 기획", "비즈니스 개발", "팀 리더십", "투자 유치"], experience: "15년", email: "jiyoung@company.com", socialLinks: { linkedin: "https://linkedin.com/in/jiyoung-kim", twitter: "https://twitter.com/jiyoung_kim", }, achievements: ["Forbes 30 Under 30", "Tech Innovation Award 2023"], certifications: ["PMP", "Agile Master"], }, { id: "2", name: "박민수", position: "CTO", department: "기술", bio: "풀스택 개발자로 시작하여 대규모 시스템 아키텍처 설계와 팀 관리를 담당하고 있습니다.", avatar: "/images/team/cto.jpg", skills: ["시스템 아키텍처", "클라우드 인프라", "DevOps", "팀 관리"], experience: "12년", email: "minsu@company.com", socialLinks: { linkedin: "https://linkedin.com/in/minsu-park", github: "https://github.com/minsu-park", }, achievements: [ "AWS Solutions Architect Professional", "Google Cloud Expert", ], certifications: ["AWS SAA", "GCP Professional", "Kubernetes CKA"], }, { id: "3", name: "이수진", position: "UX/UI 디자인 리드", department: "디자인", bio: "사용자 중심의 디자인 철학으로 직관적이고 아름다운 인터페이스를 만들어갑니다.", avatar: "/images/team/designer.jpg", skills: ["UI/UX 디자인", "프로토타이핑", "디자인 시스템", "사용자 리서치"], experience: "8년", email: "sujin@company.com", socialLinks: { linkedin: "https://linkedin.com/in/sujin-lee", portfolio: "https://sujinlee.design", }, achievements: ["Red Dot Design Award", "iF Design Award"], certifications: ["Google UX Design Certificate", "Adobe Certified Expert"], }, { id: "4", name: "정현우", position: "시니어 풀스택 개발자", department: "기술", bio: "최신 기술 스택을 활용하여 확장 가능한 웹 애플리케이션을 개발하는 것이 전문 분야입니다.", avatar: "/images/team/developer.jpg", skills: ["React", "Node.js", "Python", "AWS", "Docker"], experience: "6년", email: "hyunwoo@company.com", socialLinks: { github: "https://github.com/hyunwoo-jung", linkedin: "https://linkedin.com/in/hyunwoo-jung", }, achievements: ["오픈소스 기여자", "해커톤 우승"], certifications: ["AWS Developer Associate", "MongoDB Developer"], }, ]; export function PlusTeam({ title = "우리 팀", description = "열정적이고 전문적인 팀원들을 소개합니다.", teamMembers = defaultTeamMembers, layout = "grid", showSkills = true, showBio = true, showSocial = true, showModal = true, groupByDepartment = false, className, theme = {}, }: PlusTeamProps) { const [selectedMember, setSelectedMember] = useState(null); // Group members by department if requested const organizedMembers = groupByDepartment ? teamMembers.reduce((groups, member) => { const dept = member.department; if (!groups[dept]) { groups[dept] = []; } groups[dept].push(member); return groups; }, {} as Record) : { "All Members": teamMembers }; const openModal = (member: TeamMember) => { if (showModal) { setSelectedMember(member); } }; const closeModal = () => { setSelectedMember(null); }; const TeamMemberCard = ({ member }: { member: TeamMember }) => (
openModal(member)} style={{ fontFamily: theme.fontFamily, }} >
{member.name} { const target = e.target as HTMLImageElement; target.src = `https://ui-avatars.com/api/?name=${encodeURIComponent( member.name )}&size=256&background=${ theme.primaryColor?.replace("#", "") || "007bff" }&color=fff`; }} />

{member.name}

{member.position}

{member.department} {member.experience} 경력
{showBio && (

{member.bio}

)} {showSkills && member.skills.length > 0 && (

주요 스킬

{member.skills.slice(0, 4).map((skill) => ( {skill} ))} {member.skills.length > 4 && ( +{member.skills.length - 4} )}
)} {showSocial && (
{member.email && ( e.stopPropagation()} > Email 📧 )} {member.socialLinks.linkedin && ( e.stopPropagation()} > LinkedIn 💼 )} {member.socialLinks.github && ( e.stopPropagation()} > GitHub 🔗 )} {member.socialLinks.portfolio && ( e.stopPropagation()} > Portfolio 🎨 )}
)}
); return (
{/* Header */}

{title}

{description}

{/* Team Members */} {Object.entries(organizedMembers).map(([department, members]) => (
{groupByDepartment && department !== "All Members" && (

{department}

)}
{members.map((member) => ( ))}
))}
{/* Modal */} {showModal && selectedMember && (
e.stopPropagation()} >
{selectedMember.name} { const target = e.target as HTMLImageElement; target.src = `https://ui-avatars.com/api/?name=${encodeURIComponent( selectedMember.name )}&size=80&background=${ theme.primaryColor?.replace("#", "") || "007bff" }&color=fff`; }} />

{selectedMember.name}

{selectedMember.position}

{selectedMember.department} • {selectedMember.experience}{" "} 경력

소개

{selectedMember.bio}

전문 분야

{selectedMember.skills.map((skill) => ( {skill} ))}
{selectedMember.achievements && selectedMember.achievements.length > 0 && (

주요 성과

    {selectedMember.achievements.map( (achievement, index) => (
  • {achievement}
  • ) )}
)} {selectedMember.certifications && selectedMember.certifications.length > 0 && (

자격증

{selectedMember.certifications.map((cert) => ( {cert} ))}
)}

연락처

{selectedMember.email && ( 📧 이메일 )} {selectedMember.socialLinks.linkedin && ( 💼 LinkedIn )} {selectedMember.socialLinks.github && ( 🔗 GitHub )} {selectedMember.socialLinks.portfolio && ( 🎨 Portfolio )}
)}
); }