/** * Key event handlers for inline UI panels. * * Each handler receives a context object that exposes only the state slices * and callbacks it needs, keeping the handlers decoupled from App internals. */ import { KeyEvent } from './Input'; import { SelectItem } from './components/SelectScreen'; import { ConfirmOptions } from './App'; export interface StatusHandlerContext { close(): void; render(): void; } export declare function handleInlineStatusKey(event: KeyEvent, ctx: StatusHandlerContext): void; export interface HelpHandlerContext { scrollIndex: number; setScrollIndex(v: number): void; close(): void; render(): void; } export declare function handleInlineHelpKey(event: KeyEvent, ctx: HelpHandlerContext): void; export interface MenuHandlerContext { index: number; items: SelectItem[]; setIndex(v: number): void; close(callback: ((item: SelectItem) => void) | null, selected: SelectItem | null): void; render(): void; } /** * Optional context for type-to-filter support. Callers that supply these * get inline filtering: letters/digits append to `filter`, Backspace * deletes, first Esc clears a non-empty filter, second Esc closes. * Callers that omit them behave exactly as before (back-compat). */ export interface MenuFilterContext { filter: string; setFilter(v: string): void; } export declare function handleMenuKey(event: KeyEvent, ctx: MenuHandlerContext & Partial): void; declare const PERMISSION_OPTIONS: readonly ["read", "write", "none"]; type PermissionLevel = typeof PERMISSION_OPTIONS[number]; export interface PermissionHandlerContext { index: number; setIndex(v: number): void; close(level: PermissionLevel): void; render(): void; } export declare function handleInlinePermissionKey(event: KeyEvent, ctx: PermissionHandlerContext): void; export interface SessionItem { name: string; messageCount: number; createdAt: string; } export interface SessionPickerHandlerContext { index: number; items: SessionItem[]; deleteMode: boolean; hasDeleteCallback: boolean; setIndex(v: number): void; setItems(items: SessionItem[]): void; setDeleteMode(v: boolean): void; close(sessionName: string | null): void; onDelete(sessionName: string): void; notify(msg: string): void; render(): void; } export declare function handleInlineSessionPickerKey(event: KeyEvent, ctx: SessionPickerHandlerContext): void; export interface ConfirmHandlerContext { options: ConfirmOptions; selection: 'yes' | 'no' | 'extra'; setSelection(v: 'yes' | 'no' | 'extra'): void; close(result: 'yes' | 'no' | 'extra'): void; render(): void; } export declare function handleInlineConfirmKey(event: KeyEvent, ctx: ConfirmHandlerContext): void; export interface LoginProvider { id: string; name: string; subscribeUrl?: string; noApiKey?: boolean; } export interface LoginHandlerContext { step: 'provider' | 'apikey'; providerIndex: number; providers: LoginProvider[]; apiKey: string; setStep(v: 'provider' | 'apikey'): void; setProviderIndex(v: number): void; setApiKey(v: string): void; setError(msg: string): void; close(result: { providerId: string; apiKey: string; } | null): void; render(): void; } export declare function handleLoginKey(event: KeyEvent, ctx: LoginHandlerContext): void; export {};