/**
 * @license
 * Copyright 2025 Vybestack LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import React from 'react';
import type { DOMElement } from 'ink';
import type { TextBuffer } from '../components/shared/text-buffer.js';
import type { HistoryItem, HistoryItemWithoutId, ConsoleMessageItem, StreamingState, ConfirmationRequest } from '../types.js';
import type { IdeContext, ApprovalMode, AnyDeclarativeTool, ThoughtSummary, IdeInfo, Config, GeminiCLIExtension } from '@vybestack/llxprt-code-core';
import type { SlashCommand, CommandContext } from '../commands/types.js';
import type { ShellConfirmationRequest } from '../components/ShellConfirmationDialog.js';
import type { LoadedSettings } from '../../config/settings.js';
import type { WelcomeState, ModelInfo } from '../hooks/useWelcomeOnboarding.js';
import type { SubagentView } from '../components/SubagentManagement/types.js';
/**
 * UI State shape for the AppContainer architecture.
 * This consolidates all UI state that was previously scattered across
 * the monolithic App.tsx component.
 */
export interface UIState {
    config: Config;
    settings: LoadedSettings;
    terminalWidth: number;
    terminalHeight: number;
    mainAreaWidth: number;
    inputWidth: number;
    suggestionsWidth: number;
    terminalBackgroundColor?: string;
    history: HistoryItem[];
    pendingHistoryItems: HistoryItemWithoutId[];
    streamingState: StreamingState;
    thought: ThoughtSummary | null;
    buffer: TextBuffer;
    shellModeActive: boolean;
    isThemeDialogOpen: boolean;
    isSettingsDialogOpen: boolean;
    isAuthDialogOpen: boolean;
    isEditorDialogOpen: boolean;
    isProviderDialogOpen: boolean;
    isLoadProfileDialogOpen: boolean;
    isCreateProfileDialogOpen: boolean;
    isProfileListDialogOpen: boolean;
    isProfileDetailDialogOpen: boolean;
    isProfileEditorDialogOpen: boolean;
    isToolsDialogOpen: boolean;
    isFolderTrustDialogOpen: boolean;
    showWorkspaceMigrationDialog: boolean;
    showPrivacyNotice: boolean;
    isOAuthCodeDialogOpen: boolean;
    isPermissionsDialogOpen: boolean;
    isLoggingDialogOpen: boolean;
    isSubagentDialogOpen: boolean;
    isModelsDialogOpen: boolean;
    /**
     * @plan PLAN-20260214-SESSIONBROWSER.P21
     */
    isSessionBrowserDialogOpen: boolean;
    providerOptions: string[];
    selectedProvider: string;
    currentModel: string;
    profiles: string[];
    toolsDialogAction: 'enable' | 'disable';
    toolsDialogTools: AnyDeclarativeTool[];
    toolsDialogDisabledTools: string[];
    workspaceGeminiCLIExtensions: GeminiCLIExtension[];
    loggingDialogData: {
        entries: unknown[];
    };
    subagentDialogInitialView?: SubagentView;
    subagentDialogInitialName?: string;
    modelsDialogData?: {
        initialSearch?: string;
        initialFilters?: {
            tools?: boolean;
            vision?: boolean;
            reasoning?: boolean;
            audio?: boolean;
        };
        includeDeprecated?: boolean;
        /** Override provider filter from --provider arg */
        providerOverride?: string | null;
        /** Show all providers (from --all flag) */
        showAllProviders?: boolean;
    };
    profileListItems: Array<{
        name: string;
        type: 'standard' | 'loadbalancer';
        provider?: string;
        model?: string;
        isDefault?: boolean;
        isActive?: boolean;
    }>;
    selectedProfileName: string | null;
    selectedProfileData: unknown | null;
    defaultProfileName: string | null;
    activeProfileName: string | null;
    profileDialogError: string | null;
    profileDialogLoading: boolean;
    shellConfirmationRequest: ShellConfirmationRequest | null;
    confirmationRequest: {
        prompt: React.ReactNode;
        onConfirm: (value: boolean) => void;
    } | null;
    confirmUpdateGeminiCLIExtensionRequests: ConfirmationRequest[];
    ctrlCPressedOnce: boolean;
    ctrlDPressedOnce: boolean;
    showEscapePrompt: boolean;
    showIdeRestartPrompt: boolean;
    quittingMessages: HistoryItem[] | null;
    constrainHeight: boolean;
    showErrorDetails: boolean;
    showToolDescriptions: boolean;
    isTodoPanelCollapsed: boolean;
    isNarrow: boolean;
    vimModeEnabled: boolean;
    vimMode: string | undefined;
    ideContextState: IdeContext | undefined;
    llxprtMdFileCount: number;
    branchName: string | undefined;
    errorCount: number;
    consoleMessages: ConsoleMessageItem[];
    elapsedTime: number;
    currentLoadingPhrase: string | undefined;
    showAutoAcceptIndicator: ApprovalMode;
    tokenMetrics: {
        tokensPerMinute: number;
        throttleWaitTimeMs: number;
        sessionTokenTotal: number;
    };
    historyTokenCount: number;
    initError: string | null;
    authError: string | null;
    themeError: string | null;
    editorError: string | null;
    isProcessing: boolean;
    isInputActive: boolean;
    isFocused: boolean;
    rootUiRef: React.RefObject<DOMElement | null>;
    pendingHistoryItemRef: React.RefObject<DOMElement | null>;
    slashCommands: readonly SlashCommand[] | undefined;
    commandContext: CommandContext;
    shouldShowIdePrompt: boolean;
    currentIDE: IdeInfo | undefined;
    isRestarting: boolean;
    isTrustedFolder: boolean;
    isWelcomeDialogOpen: boolean;
    welcomeState: WelcomeState;
    welcomeAvailableProviders: string[];
    welcomeAvailableModels: ModelInfo[];
    inputHistory: string[];
    staticKey: number;
    debugMessage: string;
    showDebugProfiler: boolean;
    copyModeEnabled: boolean;
    footerHeight: number;
    placeholder: string;
    availableTerminalHeight: number;
    queueErrorMessage: string | null;
    renderMarkdown: boolean;
    activeShellPtyId: number | null;
    embeddedShellFocused: boolean;
}
declare const UIStateContext: React.Context<UIState | undefined>;
export declare function UIStateProvider({ children, value, }: {
    children: React.ReactNode;
    value: UIState;
}): import("react/jsx-runtime").JSX.Element;
export declare function useUIState(): UIState;
export { UIStateContext };
