{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "team-section-block-shadcnui", "type": "registry:block", "title": "Team Section Block", "description": "Animated team member cards with avatars, roles, and social links", "registryDependencies": [ "button" ], "dependencies": [ "framer-motion", "react" ], "files": [ { "path": "@uitripled/react-shadcn/src/components/sections/team-section-block.tsx", "content": "\"use client\";\n\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport {\n motion,\n useMotionValue,\n useReducedMotion,\n useSpring,\n useTransform,\n type Variants,\n} from \"framer-motion\";\nimport {\n Github,\n Linkedin,\n Mail,\n MapPin,\n Sparkles,\n Twitter,\n} from \"lucide-react\";\nimport { useState } from \"react\";\n\nconst teamMembers = [\n {\n name: \"Sarah Johnson\",\n role: \"CEO & Founder\",\n bio: \"Visionary leader with 15+ years in tech\",\n image: \"https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah\",\n location: \"San Francisco\",\n skills: [\"Strategy\", \"Leadership\", \"Innovation\"],\n gradient: \"from-white/10 via-white/5 to-transparent\",\n social: {\n twitter: \"#\",\n linkedin: \"#\",\n github: \"#\",\n email: \"sarah@example.com\",\n },\n },\n {\n name: \"Michael Chen\",\n role: \"CTO\",\n bio: \"Full-stack architect and AI enthusiast\",\n image: \"https://api.dicebear.com/7.x/avataaars/svg?seed=Michael\",\n location: \"New York\",\n skills: [\"AI/ML\", \"Architecture\", \"Cloud\"],\n gradient: \"from-white/12 via-white/5 to-transparent\",\n social: {\n twitter: \"#\",\n linkedin: \"#\",\n github: \"#\",\n email: \"michael@example.com\",\n },\n },\n {\n name: \"Emily Rodriguez\",\n role: \"Head of Design\",\n bio: \"Creative mind behind beautiful interfaces\",\n image: \"https://api.dicebear.com/7.x/avataaars/svg?seed=Emily\",\n location: \"London\",\n skills: [\"UI/UX\", \"Branding\", \"Motion\"],\n gradient: \"from-white/12 via-white/5 to-transparent\",\n social: {\n twitter: \"#\",\n linkedin: \"#\",\n github: \"#\",\n email: \"emily@example.com\",\n },\n },\n {\n name: \"David Park\",\n role: \"Lead Developer\",\n bio: \"Code wizard and performance optimizer\",\n image: \"https://api.dicebear.com/7.x/avataaars/svg?seed=David\",\n location: \"Tokyo\",\n skills: [\"React\", \"TypeScript\", \"Performance\"],\n gradient: \"from-foreground/12 via-foreground/5 to-transparent\",\n social: {\n twitter: \"#\",\n linkedin: \"#\",\n github: \"#\",\n email: \"david@example.com\",\n },\n },\n];\n\nconst containerVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.15,\n delayChildren: 0.3,\n },\n },\n};\n\nconst itemVariants: Variants = {\n hidden: { opacity: 0, y: 30, scale: 0.9 },\n visible: {\n opacity: 1,\n y: 0,\n scale: 1,\n transition: {\n duration: 0.6,\n ease: [0.6, 0.05, 0.01, 0.9],\n },\n },\n};\n\nfunction TeamMemberCard({ member }: { member: (typeof teamMembers)[0] }) {\n const [isHovered, setIsHovered] = useState(false);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const shouldReduceMotion = useReducedMotion();\n\n const rotateX = useSpring(useTransform(mouseY, [-0.5, 0.5], [5, -5]), {\n stiffness: 300,\n damping: 30,\n });\n const rotateY = useSpring(useTransform(mouseX, [-0.5, 0.5], [-5, 5]), {\n stiffness: 300,\n damping: 30,\n });\n\n const handleMouseMove = (e: React.MouseEvent) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const width = rect.width;\n const height = rect.height;\n const x = (e.clientX - rect.left - width / 2) / (width / 2);\n const y = (e.clientY - rect.top - height / 2) / (height / 2);\n mouseX.set(x);\n mouseY.set(y);\n };\n\n const handleMouseLeave = () => {\n mouseX.set(0);\n mouseY.set(0);\n setIsHovered(false);\n };\n\n return (\n \n setIsHovered(true)}\n onMouseLeave={handleMouseLeave}\n className=\"group relative\"\n >\n \n {/* Animated gradient overlay */}\n \n\n {/* Sparkle effect on hover */}\n \n \n \n\n
\n {/* Avatar Section */}\n
\n \n \n
\n \n
\n \n
\n\n {/* Info Section */}\n
\n \n {member.name}\n \n \n {member.role}\n \n\n \n \n {member.location}\n \n\n

\n {member.bio}\n

\n\n {/* Skills */}\n \n {member.skills.map((skill, idx) => (\n \n \n {skill}\n \n \n ))}\n \n\n {/* Social Links */}\n \n {[\n { icon: Twitter, label: \"Twitter\" },\n { icon: Linkedin, label: \"LinkedIn\" },\n { icon: Github, label: \"GitHub\" },\n { icon: Mail, label: \"Email\" },\n ].map((social, idx) => (\n \n \n \n \n \n \n \n ))}\n \n
\n
\n \n \n \n );\n}\n\nexport function TeamSectionBlock() {\n const shouldReduceMotion = useReducedMotion();\n\n return (\n \n {/* Background decorative elements */}\n
\n \n \n
\n\n
\n {/* Header */}\n \n \n \n \n Our Dream Team\n \n \n\n \n Meet the people behind\n
\n \n our success\n \n \n\n \n A diverse team of talented individuals working together to build\n amazing products and deliver exceptional results.\n \n \n\n {/* Team Grid */}\n \n {teamMembers.map((member, index) => (\n \n ))}\n \n\n {/* CTA */}\n \n \n

Join Our Amazing Team

\n

\n We're always looking for talented people to join our mission\n

\n \n \n View Open Positions\n \n →\n \n \n
\n \n
\n \n );\n}\n", "type": "registry:block", "target": "components/uitripled/team-section-block-shadcnui.tsx" } ] }