/** * [WHO]: Provides PersistentSurfaceRegistry, PersistentSurfaceContext — extension keyed persistent surfaces * [FROM]: Depends on @catui/tui (Container/Component/Text/Spacer/TUI), theme, theme-contract (Theme), * extensions-host (ExtensionWidgetOptions), footer-data-provider (FooterDataProvider) — types * [TO]: Consumed by modes/interactive/interactive-mode.ts (held as `this.surfaces`; wired into ExtensionUIContext * setWidget/setFooter/setHeader/setStatus; called by resetExtensionUI + syncBuddyPet) * [HERE]: modes/interactive/controllers/extension-ui/persistent-surface-registry.ts — P5 extension-ui rewrite, host 1/4 (UI02, 纯搬) * * First extension-ui host (see ../../../.dev-docs/architecture-review/interactive-ui-review/extension-ui-analysis.md). * Owns the *keyed persistent surfaces* an extension can set: above/below widgets, custom footer, custom * header, and footer status. The mount-owned layout containers (widget containers, header container, * built-in header/footer, footer data provider, TUI) are reached through a narrow context. Behavior is * identical to the former InteractiveMode methods (纯搬). */ import { type Component, Container, type TUI } from "@catui/tui"; import type { ExtensionWidgetOptions } from "../../../../core/extensions-host/index.js"; import type { Theme } from "../../../../core/theme-contract.js"; import type { FooterDataProvider } from "../../footer-data-provider.js"; type DisposableComponent = Component & { dispose?(): void; }; /** Narrow capability seam: the mount-owned layout/render handles the surfaces manipulate. */ export interface PersistentSurfaceContext { requestRender(): void; getUi(): TUI; getWidgetContainerAbove(): Container | undefined; getWidgetContainerBelow(): Container | undefined; getHeaderContainer(): Container; getBuiltInHeader(): Component | undefined; /** The built-in footer component (swapped out when a custom footer is set). */ getFooter(): Component; getFooterDataProvider(): FooterDataProvider; } export declare class PersistentSurfaceRegistry { private readonly ctx; private readonly widgetsAbove; private readonly widgetsBelow; private customFooter; private customHeader; constructor(ctx: PersistentSurfaceContext); setStatus(key: string, text: string | undefined): void; /** Set an extension widget (string array or custom component). */ setWidget(key: string, content: string[] | ((tui: TUI, thm: Theme) => DisposableComponent) | undefined, options?: ExtensionWidgetOptions): void; clearWidgets(): void; /** Render all extension widgets to the widget containers. */ renderWidgets(): void; private renderWidgetContainer; /** Set a custom footer component, or restore the built-in footer. */ setFooter(factory: ((tui: TUI, thm: Theme, footerData: FooterDataProvider) => DisposableComponent) | undefined): void; /** Set a custom header component, or restore the built-in header. */ setHeader(factory: ((tui: TUI, thm: Theme) => DisposableComponent) | undefined): void; } export {};