Spaces:
Sleeping
Sleeping
| import { buttonVariants } from "@/components/ui/button"; | |
| import { | |
| Card, | |
| CardContent, | |
| CardDescription, | |
| CardFooter, | |
| CardHeader, | |
| CardTitle, | |
| } from "@/components/ui/card"; | |
| import { Facebook, Instagram, Linkedin } from "lucide-react"; | |
| interface TeamProps { | |
| imageUrl: string; | |
| name: string; | |
| position: string; | |
| socialNetworks: SociaNetworkslProps[]; | |
| } | |
| interface SociaNetworkslProps { | |
| name: string; | |
| url: string; | |
| } | |
| const teamList: TeamProps[] = [ | |
| { | |
| imageUrl: "https://i.pravatar.cc/150?img=35", | |
| name: "Emma Smith", | |
| position: "Product Manager", | |
| socialNetworks: [ | |
| { name: "Linkedin", url: "http://linkedin.com" }, | |
| { | |
| name: "Facebook", | |
| url: "https://www.facebook.com/", | |
| }, | |
| { | |
| name: "Instagram", | |
| url: "https://www.instagram.com/", | |
| }, | |
| ], | |
| }, | |
| { | |
| imageUrl: "https://i.pravatar.cc/150?img=60", | |
| name: "John Doe", | |
| position: "Tech Lead", | |
| socialNetworks: [ | |
| { name: "Linkedin", url: "http://linkedin.com" }, | |
| { | |
| name: "Facebook", | |
| url: "https://www.facebook.com/", | |
| }, | |
| { | |
| name: "Instagram", | |
| url: "https://www.instagram.com/", | |
| }, | |
| ], | |
| }, | |
| { | |
| imageUrl: "https://i.pravatar.cc/150?img=36", | |
| name: "Ashley Ross", | |
| position: "Frontend Developer", | |
| socialNetworks: [ | |
| { name: "Linkedin", url: "http://linkedin.com" }, | |
| { | |
| name: "Instagram", | |
| url: "https://www.instagram.com/", | |
| }, | |
| ], | |
| }, | |
| { | |
| imageUrl: "https://i.pravatar.cc/150?img=17", | |
| name: "Bruce Rogers", | |
| position: "Backend Developer", | |
| socialNetworks: [ | |
| { name: "Linkedin", url: "http://linkedin.com" }, | |
| { | |
| name: "Facebook", | |
| url: "https://www.facebook.com/", | |
| }, | |
| ], | |
| }, | |
| ]; | |
| export const Team = () => { | |
| const socialIcon = (iconName: string) => { | |
| switch (iconName) { | |
| case "Linkedin": | |
| return <Linkedin size="20" />; | |
| case "Facebook": | |
| return <Facebook size="20" />; | |
| case "Instagram": | |
| return <Instagram size="20" />; | |
| } | |
| }; | |
| return ( | |
| <section | |
| id="team" | |
| className="container py-24 sm:py-32" | |
| > | |
| <h2 className="text-3xl md:text-4xl font-bold"> | |
| <span className="bg-gradient-to-b from-primary/60 to-primary text-transparent bg-clip-text"> | |
| Our Dedicated{" "} | |
| </span> | |
| Crew | |
| </h2> | |
| <p className="mt-4 mb-10 text-xl text-muted-foreground"> | |
| Lorem ipsum dolor sit amet consectetur, adipisicing elit. Veritatis | |
| dolor pariatur sit! | |
| </p> | |
| <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8 gap-y-10"> | |
| {teamList.map( | |
| ({ imageUrl, name, position, socialNetworks }: TeamProps) => ( | |
| <Card | |
| key={name} | |
| className="bg-muted/50 relative mt-8 flex flex-col justify-center items-center" | |
| > | |
| <CardHeader className="mt-8 flex justify-center items-center pb-2"> | |
| <img | |
| src={imageUrl} | |
| alt={`${name} ${position}`} | |
| className="absolute -top-12 rounded-full w-24 h-24 aspect-square object-cover" | |
| /> | |
| <CardTitle className="text-center">{name}</CardTitle> | |
| <CardDescription className="text-primary"> | |
| {position} | |
| </CardDescription> | |
| </CardHeader> | |
| <CardContent className="text-center pb-2"> | |
| <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> | |
| </CardContent> | |
| <CardFooter> | |
| {socialNetworks.map(({ name, url }: SociaNetworkslProps) => ( | |
| <div key={name}> | |
| <a | |
| href={url} | |
| target="_blank" | |
| className={buttonVariants({ | |
| variant: "ghost", | |
| size: "sm", | |
| })} | |
| > | |
| <span className="sr-only">{name} icon</span> | |
| {socialIcon(name)} | |
| </a> | |
| </div> | |
| ))} | |
| </CardFooter> | |
| </Card> | |
| ) | |
| )} | |
| </div> | |
| </section> | |
| ); | |
| }; | |