/** * CategoryChips — horizontal filter chips for plugin categories. */ import { useMemo } from 'react'; import { Button } from '@renderer/components/ui/button'; import { normalizeCategory } from '@shared/utils/extensionNormalizers'; import type { EnrichedPlugin } from '@shared/types/extensions'; interface CategoryChipsProps { plugins: EnrichedPlugin[]; selected: string[]; onToggle: (category: string) => void; } export const CategoryChips = ({ plugins, selected, onToggle, }: CategoryChipsProps): React.JSX.Element => { const categoryCounts = useMemo(() => { const counts = new Map(); for (const p of plugins) { const cat = normalizeCategory(p.category); counts.set(cat, (counts.get(cat) ?? 0) + 1); } // Sort by count descending return [...counts.entries()].sort((a, b) => b[1] - a[1]); }, [plugins]); if (categoryCounts.length === 0) return <>; return (
{categoryCounts.map(([category, count]) => { const isActive = selected.includes(category); return ( ); })}
); };