/** * PluginDetailPanel Component * * Shows detailed plugin information from plugin.yml (ScannedPlugin data), * registry entry, and server presence. Displayed when user presses 'i' on a plugin. * * @since v2.5.15 */ import type React from 'react'; import type { SupersededByAdvisory } from '../../core/registry/registry-types.js'; import type { CombinedPlugin } from '../../core/types/index.js'; /** * The subset of RegistryService the panel needs to resolve a superseded-by * advisory (roadmap 3.6). Narrow so tests can inject a fake without * constructing the real service (which reads bundled + user registry files). */ export interface SupersededAdvisoryLookup { isLoaded(): boolean; tryLoad(): boolean; getById(id: string): { supersededBy?: SupersededByAdvisory; } | undefined; } export interface PluginDetailPanelProps { plugin: CombinedPlugin; onClose: () => void; onEdit?: (plugin: CombinedPlugin) => void; onEditNote?: (plugin: CombinedPlugin) => void; note?: string; isActive?: boolean; /** Registry lookup override for advisory resolution (defaults to the singleton service) */ registryLookup?: SupersededAdvisoryLookup; } /** * Resolve the EOL advisory for a plugin's matched curated-registry entry. * Returns undefined when the plugin has no registry match, the registry * can't be loaded, or the entry carries no advisory — never throws. */ export declare function resolveSupersededAdvisory(registryId: string | undefined, lookup?: SupersededAdvisoryLookup): SupersededByAdvisory | undefined; /** One-line advisory text (roadmap 3.6 honest funnel) */ export declare function formatSupersededAdvisory(advisory: SupersededByAdvisory): string; export declare function PluginDetailPanel({ plugin, onClose, onEdit, onEditNote, note, isActive, registryLookup }: PluginDetailPanelProps): React.ReactElement; //# sourceMappingURL=PluginDetailPanel.d.ts.map