/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { createContext, useContext } from 'react'; import { type Key } from '../hooks/useKeypress.js'; import { type IdeIntegrationNudgeResult } from '../IdeIntegrationNudge.js'; import { type FolderTrustChoice } from '../components/FolderTrustDialog.js'; import { type AuthType, type EditorType, type ApprovalMode, } from '@qwen-code/qwen-code-core'; import { type SettingScope } from '../../config/settings.js'; import type { AuthState } from '../types.js'; import { type VisionSwitchOutcome } from '../components/ModelSwitchDialog.js'; import { type OpenAICredentials } from '../components/OpenAIKeyPrompt.js'; export interface UIActions { handleThemeSelect: ( themeName: string | undefined, scope: SettingScope, ) => void; handleThemeHighlight: (themeName: string | undefined) => void; handleApprovalModeSelect: ( mode: ApprovalMode | undefined, scope: SettingScope, ) => void; handleAuthSelect: ( authType: AuthType | undefined, scope: SettingScope, credentials?: OpenAICredentials, ) => Promise; setAuthState: (state: AuthState) => void; onAuthError: (error: string) => void; cancelAuthentication: () => void; handleEditorSelect: ( editorType: EditorType | undefined, scope: SettingScope, ) => void; exitEditorDialog: () => void; closeSettingsDialog: () => void; closeModelDialog: () => void; closePermissionsDialog: () => void; setShellModeActive: (value: boolean) => void; vimHandleInput: (key: Key) => boolean; handleIdePromptComplete: (result: IdeIntegrationNudgeResult) => void; handleFolderTrustSelect: (choice: FolderTrustChoice) => void; setConstrainHeight: (value: boolean) => void; onEscapePromptChange: (show: boolean) => void; refreshStatic: () => void; handleFinalSubmit: (value: string) => void; handleClearScreen: () => void; onWorkspaceMigrationDialogOpen: () => void; onWorkspaceMigrationDialogClose: () => void; handleProQuotaChoice: (choice: 'auth' | 'continue') => void; // Vision switch dialog handleVisionSwitchSelect: (outcome: VisionSwitchOutcome) => void; // Welcome back dialog handleWelcomeBackSelection: (choice: 'continue' | 'restart') => void; handleWelcomeBackClose: () => void; // Subagent dialogs closeSubagentCreateDialog: () => void; closeAgentsManagerDialog: () => void; // Resume session dialog openResumeDialog: () => void; closeResumeDialog: () => void; handleResume: (sessionId: string) => void; } export const UIActionsContext = createContext(null); export const useUIActions = () => { const context = useContext(UIActionsContext); if (!context) { throw new Error('useUIActions must be used within a UIActionsProvider'); } return context; };