/** * CapabilityChips — filter chips for plugin capability types. */ import { useMemo } from 'react'; import { Button } from '@renderer/components/ui/button'; import { getCapabilityLabel, inferCapabilities } from '@shared/utils/extensionNormalizers'; import type { EnrichedPlugin, PluginCapability } from '@shared/types/extensions'; const ALL_CAPABILITIES: PluginCapability[] = ['lsp', 'mcp', 'agent', 'command', 'hook', 'skill']; interface CapabilityChipsProps { plugins: EnrichedPlugin[]; selected: PluginCapability[]; onToggle: (capability: PluginCapability) => void; } export const CapabilityChips = ({ plugins, selected, onToggle, }: CapabilityChipsProps): React.JSX.Element => { const capabilityCounts = useMemo(() => { const counts = new Map(); for (const p of plugins) { const caps = inferCapabilities(p); for (const cap of caps) { counts.set(cap, (counts.get(cap) ?? 0) + 1); } } return counts; }, [plugins]); return (
{ALL_CAPABILITIES.map((cap) => { const count = capabilityCounts.get(cap) ?? 0; if (count === 0) return null; const isActive = selected.includes(cap); return ( ); })}
); };