SocialLinks.tsx 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import React from 'react';
  2. import type { SocialLinksData } from '../types';
  3. import LinkedInIcon from './icons/LinkedInIcon';
  4. import XIcon from './icons/XIcon';
  5. import GithubIcon from './icons/GithubIcon';
  6. import TiktokIcon from './icons/TiktokIcon';
  7. import VerifiedIcon from './icons/VerifiedIcon';
  8. import ArrowRightIcon from './icons/ArrowRightIcon';
  9. import InstagramIcon from './icons/InstagramIcon';
  10. import FacebookIcon from './icons/FacebookIcon';
  11. import DiscordIcon from './icons/DiscordIcon';
  12. interface SocialLinksProps {
  13. links: SocialLinksData;
  14. }
  15. const socialPlatforms = [
  16. { key: 'linkedin', name: 'LinkedIn', icon: <LinkedInIcon />, iconBg: 'bg-gradient-to-br from-blue-500 to-sky-400' },
  17. { key: 'x', name: 'X (Twitter)', icon: <XIcon />, iconBg: 'bg-gradient-to-br from-slate-900 to-slate-700' },
  18. { key: 'github', name: 'GitHub', icon: <GithubIcon />, iconBg: 'bg-gradient-to-br from-slate-900 to-slate-700' },
  19. { key: 'tiktok', name: 'TikTok', icon: <TiktokIcon />, iconBg: 'bg-gradient-to-br from-black via-rose-500 to-cyan-400' },
  20. { key: 'instagram', name: 'Instagram', icon: <InstagramIcon />, iconBg: 'bg-gradient-to-br from-purple-500 via-pink-500 to-yellow-500' },
  21. { key: 'facebook', name: 'Facebook', icon: <FacebookIcon />, iconBg: 'bg-gradient-to-br from-blue-700 to-blue-500' },
  22. { key: 'discord', name: 'Discord', icon: <DiscordIcon />, iconBg: 'bg-gradient-to-br from-indigo-600 to-purple-500' },
  23. ] as const;
  24. const SocialLinks: React.FC<SocialLinksProps> = ({ links }) => {
  25. return (
  26. <div className="bg-white rounded-2xl border border-slate-200 p-6">
  27. <h2 className="text-xl font-bold text-slate-800 mb-4">Verified Social Accounts</h2>
  28. <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
  29. {socialPlatforms.map((platform) => {
  30. const link = links[platform.key];
  31. if (!link) return null;
  32. return (
  33. <a
  34. key={platform.key}
  35. href={link}
  36. target="_blank"
  37. rel="noopener noreferrer"
  38. className={`group flex items-center justify-between p-4 rounded-xl bg-slate-50 transition-colors duration-300 ease-in-out hover:bg-slate-100`}
  39. >
  40. <div className="flex items-center overflow-hidden">
  41. <div className={`flex-shrink-0 w-10 h-10 rounded-xl flex items-center justify-center text-white ${platform.iconBg}`}>
  42. {platform.icon}
  43. </div>
  44. <div className="ml-4">
  45. <div className="flex items-center">
  46. <h3 className="font-bold text-slate-800 text-sm">{platform.name}</h3>
  47. <div className="ml-2 flex items-center bg-green-100 text-green-800 text-xs font-medium px-2 py-0.5 rounded-full">
  48. <VerifiedIcon className="w-3 h-3 mr-1" />
  49. Verified
  50. </div>
  51. </div>
  52. <p className="text-xs text-slate-500 font-mono truncate max-w-[120px] sm:max-w-xs">{link.replace(/^https?:\/\/(www\.)?/, '')}</p>
  53. </div>
  54. </div>
  55. <div className="text-slate-400 group-hover:text-slate-800 transition-transform duration-300 group-hover:translate-x-1">
  56. <ArrowRightIcon className="w-4 h-4" />
  57. </div>
  58. </a>
  59. );
  60. })}
  61. </div>
  62. </div>
  63. );
  64. };
  65. export default SocialLinks;