/**
 * TUI model selector — fuzzy-searchable list of available LLM models.
 *
 * Shows only models with configured API keys. Known providers are filtered
 * to a curated allowlist; unlisted providers show all models. Selecting a
 * model saves it as the new default via SettingsManager.
 */
import type { Model } from '../../../ai/types.js';
import { Container, type Focusable, Input, type TUI } from '../../../tui/index.js';
export interface ModelSelectorSettingsStore {
    setDefaultModelAndProvider(provider: string, modelId: string): void;
}
export interface ModelSelectorRegistry {
    getAvailable(): Model<any>[];
    getError(): string | undefined;
    refresh(): void;
}
/**
 * Component that renders a model selector with search.
 * Shows all available (authenticated) models.
 */
export declare class ModelSelectorComponent extends Container implements Focusable {
    private searchInput;
    private _focused;
    /** Whether this component currently has focus. */
    get focused(): boolean;
    /** Propagate focus state to the underlying search input. */
    set focused(value: boolean);
    private listContainer;
    private allModels;
    private filteredModels;
    private selectedIndex;
    private currentModel?;
    private settingsManager;
    private modelRegistry;
    private onSelectCallback;
    private onCancelCallback;
    private errorMessage?;
    private tui;
    /** Build the model selector with search input, list, and async model load. */
    constructor(tui: TUI, currentModel: Model<any> | undefined, settingsManager: ModelSelectorSettingsStore, modelRegistry: ModelSelectorRegistry, _scopedModels: ReadonlyArray<unknown>, // kept for call-site compat, ignored
    onSelect: (model: Model<any>) => void, onCancel: () => void, initialSearchInput?: string);
    /** Refresh registry and load the filtered list of available models. */
    private loadModels;
    /** Sort with the current model first, then alphabetically by provider. */
    private sortModels;
    /** Apply a fuzzy filter to the model list and refresh the rendered slice. */
    private filterModels;
    /** Re-render the visible list slice, scroll indicator, and footer info. */
    private updateList;
    /** Handle navigation, confirm/cancel, and pass-through to the search input. */
    handleInput(keyData: string): void;
    /** Persist the chosen model as default and notify the caller. */
    private handleSelect;
    /** Expose the search input so callers can manage focus or state. */
    getSearchInput(): Input;
}
//# sourceMappingURL=model-selector.d.ts.map