import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { motion } from 'framer-motion'; import { Database, Server, Store, Code2, Box } from 'lucide-react'; interface SkillItem { name: string; level: number; } interface SkillGroup { category: string; items: SkillItem[]; } const iconMap: { [key: string]: React.ReactNode } = { 'Python': , 'Server': , 'Google Ads': , 'Meta Ads': , 'Shopware': , 'Shopify': , 'WooCommerce': , 'JTL WAWI': , 'AirFlow': }; const Skills = () => { const { t } = useTranslation(); const [selectedSkill, setSelectedSkill] = useState(null); const skillGroups = t('pages.about.skills.skillGroups', { returnObjects: true }) as SkillGroup[]; // Alle Skills aus allen Gruppen flach auflisten const allSkills = skillGroups.flatMap(group => group.items); return (

{t('pages.about.skills.title')}

{/* Skills Progress Bars */}
{allSkills.map((skill) => ( setSelectedSkill(skill.name)} onHoverEnd={() => setSelectedSkill(null)} >
{skill.name} {selectedSkill === skill.name && ( {t('pages.about.skills.ui.skillLevel', { level: skill.level, skill: skill.name })} )}
{skill.level}%
))}
{/* Skills Icons Grid */}
{allSkills.map((skill) => ( setSelectedSkill(skill.name === selectedSkill ? null : skill.name)} role="button" aria-pressed={selectedSkill === skill.name} aria-label={t('pages.about.skills.aria.selectSkill')} >
{iconMap[skill.name] || }
{skill.name} {selectedSkill === skill.name && ( {t('pages.about.skills.screenReader.skillProgress', { skill: skill.name, level: skill.level })} )}
))}
); }; export default Skills;