/** * @file components/sidebar/ServerSidebar.tsx * @description Sidebar navigation component for switching between servers and home view. */ "use client"; import Link from "next/link"; import NextImage from "next/image"; import { usePathname } from "next/navigation"; import { useActiveServer, type ServerWithChannels, } from "@/lib/context/ServerContext"; /** * ServerSidebar component rendering the list of available servers, home navigation, and server creation trigger. * * @param {Object} props - The component props. * @param {ServerWithChannels[]} props.servers - Array of server objects containing channel and display metadata. * @returns {JSX.Element} The rendered server sidebar navigation. */ export function ServerSidebar({ servers }: { servers: ServerWithChannels[] }) { const pathname = usePathname(); const { setActiveServer } = useActiveServer(); /** * Mapping of Tailwind CSS background color classes for server icons. */ const COLOR_CLASSES: Record = { "bg-indigo-500": "bg-indigo-500", "bg-emerald-500": "bg-emerald-500", "bg-rose-500": "bg-rose-500", "bg-amber-500": "bg-amber-500", "bg-sky-500": "bg-sky-500", "bg-violet-500": "bg-violet-500", }; /** * Shared base CSS utility classes for server icon buttons. */ const baseIconStyles = "w-12 h-12 flex items-center justify-center transition-all duration-200 shadow-md shrink-0"; /** * CSS utility classes applied to the currently active server icon. */ const activeIconStyles = "rounded-xl ring-2 ring-accent ring-offset-2 ring-offset-surface cursor-default pointer-events-none opacity-100"; /** * CSS utility classes applied to inactive server icons. */ const inactiveIconStyles = "rounded-3xl opacity-80 hover:opacity-100 hover:rounded-xl hover:scale-105 hover:shadow-lg hover:ring-2 hover:ring-accent/40 cursor-pointer active:scale-95"; return ( ); }