import type { CliRenderer } from "../renderer.js"; export type PluginContext = object; export type SlotMode = "append" | "replace" | "single_winner"; export type PluginErrorPhase = "setup" | "render" | "dispose" | "error_placeholder"; export type PluginErrorSource = "registry" | "core" | (string & {}); export interface PluginErrorEvent { pluginId: string; slot?: string; phase: PluginErrorPhase; source: PluginErrorSource; error: Error; timestamp: number; } export interface PluginErrorReport { pluginId: string; slot?: string; phase: PluginErrorPhase; source?: PluginErrorSource; error: unknown; } export type SlotRenderer = (ctx: Readonly, props: TProps) => TNode; export interface Plugin { id: string; order?: number; setup?: (ctx: Readonly, renderer: CliRenderer) => void; dispose?: () => void; slots: { [K in keyof TSlots]?: SlotRenderer; }; } export interface ResolvedSlotRenderer { id: string; renderer: SlotRenderer; }