// frontend\src\components\ui\ModelGenderIcon.tsx 'use client' import { type ComponentType, type ReactNode } from 'react' function cn(...parts: Array) { return parts.filter(Boolean).join(' ') } type GenderKind = 'female' | 'male' | 'trans' | 'couple' | null function normalizeGender( gender?: string | null, ): GenderKind { const raw = `${gender || ''}`.trim().toLowerCase() if (!raw) return null if (raw.includes('couple') || raw.includes('pair') || raw === 'c') { return 'couple' } if ( raw.includes('trans') || raw.includes('transgender') || raw === 't' ) { return 'trans' } if ( raw.includes('female') || raw.includes('girl') || raw.includes('woman') || raw === 'f' || raw === 'w' ) { return 'female' } if ( raw.includes('male') || raw.includes('boy') || raw.includes('man') || raw === 'm' ) { return 'male' } return null } type IconProps = { className?: string } function BaseIcon({ children, className, }: { children: ReactNode className?: string }) { return ( ) } function FemaleIcon({ className }: IconProps) { return ( ) } function MaleIcon({ className }: IconProps) { return ( ) } function TransIcon({ className }: IconProps) { return ( ) } function CoupleIcon({ className }: IconProps) { return ( ) } type Props = { gender?: string | null variant?: 'hero' | 'default' className?: string iconClassName?: string } export default function ModelGenderIcon({ gender, variant = 'default', className, iconClassName, }: Props) { const kind = normalizeGender(gender) if (!kind) return null const map: Record, { label: string; Icon: ComponentType }> = { female: { label: 'Female', Icon: FemaleIcon }, male: { label: 'Male', Icon: MaleIcon }, trans: { label: 'Trans', Icon: TransIcon }, couple: { label: 'Couple', Icon: CoupleIcon }, } const { label, Icon } = map[kind] const toneClass = kind === 'female' ? 'bg-pink-100 text-pink-700 ring-pink-200 dark:bg-pink-500/15 dark:text-pink-200 dark:ring-pink-400/25' : kind === 'male' ? 'bg-sky-100 text-sky-700 ring-sky-200 dark:bg-sky-500/15 dark:text-sky-200 dark:ring-sky-400/25' : kind === 'trans' ? 'bg-violet-100 text-violet-700 ring-violet-200 dark:bg-violet-500/15 dark:text-violet-200 dark:ring-violet-400/25' : 'bg-gradient-to-r from-sky-100 to-pink-100 text-fuchsia-700 ring-fuchsia-200 dark:from-sky-500/15 dark:to-pink-500/15 dark:text-pink-200 dark:ring-pink-400/25' return ( ) }