/** * 插件卡片组件 * * 使用 console 语义 token,与 PluginDetailPage 等页面保持一致 */ import { Link } from 'react-router-dom'; import { Play, Pause, LayoutGrid } from 'lucide-react'; import { PluginListItem, PluginStatus } from '@typings/plugin'; import { StatusPill } from '@components/console'; import { Button } from '@components/ui/button'; interface PluginCardProps { plugin: PluginListItem; onEnable: (name: string) => void; onDisable: (name: string) => void; } // 状态到 StatusPill 变体的映射 const statusVariantMap: Record = { enabled: 'enabled', disabled: 'disabled', error: 'error', dependency_error: 'error', incomplete: 'incomplete', discovered: 'warning', loaded: 'warning', installed: 'disabled', installing: 'warning', uninstalling: 'warning', }; export function PluginCard({ plugin, onEnable, onDisable }: PluginCardProps) { const statusVariant = statusVariantMap[plugin.status] || 'disabled'; const hasUiPage = plugin.ui_entry?.type === 'static'; return (
{/* 头部:名称 + 状态 */}

{plugin.metadata.name}

v{plugin.metadata.version} {plugin.metadata.author}
{/* 描述 */}

{plugin.metadata.description}

{plugin.errors.length > 0 && (

{plugin.errors[0].message}

)} {/* 操作按钮 */}
{plugin.status === 'disabled' && ( )} {plugin.status === 'enabled' && ( )} {hasUiPage && ( )}
); }