import type { SocialLink as ISocialLink } from '@rspress/core'; import iconMap from 'virtual-social-links'; import './index.scss'; import { GithubStars } from './GithubStars'; import { useHoverGroup } from '../HoverGroup/useHoverGroup'; interface SocialLinkProps { link: ISocialLink; /** * @default 'center' */ hoverGroupPosition?: 'center' | 'left' | 'right'; } export const SocialLink = (props: SocialLinkProps) => { const { link, hoverGroupPosition = 'center' } = props; const { icon, mode = 'link', content } = link; let IconComp: React.ReactElement = <>; if (icon) { const html = typeof icon === 'string' ? iconMap[icon] : icon.svg; IconComp = (
); } const { handleMouseEnter, handleMouseLeave, hoverGroup } = useHoverGroup({ position: hoverGroupPosition, customChildren: (
{mode === 'text' ? (
{content}
) : mode === 'dom' ? (
) : mode === 'img' ? ( img ) : null}
), }); if (mode === 'link') { return (
{IconComp}
); } if (mode === 'github-stars') { return ; } if (mode === 'text') { return (
{IconComp} {hoverGroup}
); } if (mode === 'img') { return (
{IconComp} {hoverGroup}
); } if (mode === 'dom') { return (
{IconComp} {hoverGroup}
); } return
; };