// ======================================== // SkillCard Component // ======================================== // Card component for displaying skills with enable/disable toggle import { useState } from 'react'; import { Sparkles, MoreVertical, Info, Settings, Power, PowerOff, Tag, User, } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Card } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; import { Button } from '@/components/ui/Button'; import { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '@/components/ui/Dropdown'; import type { Skill } from '@/lib/api'; // ========== Types ========== export interface SkillCardProps { skill: Skill; onToggle?: (skill: Skill, enabled: boolean) => void; onClick?: (skill: Skill) => void; onConfigure?: (skill: Skill) => void; className?: string; compact?: boolean; showActions?: boolean; isToggling?: boolean; } // ========== Source Badge ========== const sourceConfig: Record, { color: string; label: string }> = { builtin: { color: 'default', label: 'Built-in' }, custom: { color: 'secondary', label: 'Custom' }, community: { color: 'outline', label: 'Community' }, }; export function SourceBadge({ source }: { source?: Skill['source'] }) { const config = sourceConfig[source ?? 'builtin']; return ( {config.label} ); } // ========== Main SkillCard Component ========== export function SkillCard({ skill, onToggle, onClick, onConfigure, className, compact = false, showActions = true, isToggling = false, }: SkillCardProps) { const [isMenuOpen, setIsMenuOpen] = useState(false); const handleClick = () => { if (!isMenuOpen) { onClick?.(skill); } }; const handleToggle = (e: React.MouseEvent) => { e.stopPropagation(); onToggle?.(skill, !skill.enabled); }; const handleConfigure = (e: React.MouseEvent) => { e.stopPropagation(); setIsMenuOpen(false); onConfigure?.(skill); }; if (compact) { return (
{skill.name}
); } return ( {/* Header */}

{skill.name}

{skill.version && (

v{skill.version}

)}
{showActions && ( onClick?.(skill)}> View Details Configure {skill.enabled ? ( <> Disable ) : ( <> Enable )} )}
{/* Description */}

{skill.description}

{/* Triggers */} {skill.triggers && skill.triggers.length > 0 && (
Triggers
{skill.triggers.slice(0, 4).map((trigger) => ( {trigger} ))} {skill.triggers.length > 4 && ( +{skill.triggers.length - 4} )}
)} {/* Footer */}
{skill.category && ( {skill.category} )}
{/* Author */} {skill.author && (
{skill.author}
)}
); } export default SkillCard;