diff --git a/apps/web/src/components/mobile-terminal-wrapper.tsx b/apps/web/src/components/mobile-terminal-wrapper.tsx index 94479af..3e0e7d3 100644 --- a/apps/web/src/components/mobile-terminal-wrapper.tsx +++ b/apps/web/src/components/mobile-terminal-wrapper.tsx @@ -29,6 +29,7 @@ export const MobileTerminalWrapper: React.FC = ({ const [terminalRef, setTerminalRef] = useState<{ sendData: (data: string) => void; connectionStatus: "connecting" | "connected" | "disconnected" | "error"; + focusInput: () => void; } | null>(null); const headerAutoHide = useAutoHide({ timeout: 3000, enabled: isMobile }); @@ -40,8 +41,8 @@ export const MobileTerminalWrapper: React.FC = ({ }, [headerAutoHide, keysAutoHide]); const handleTerminalReady = useCallback( - (sendData: (data: string) => void, connectionStatus: "connecting" | "connected" | "disconnected" | "error") => { - setTerminalRef({ sendData, connectionStatus }); + (sendData: (data: string) => void, connectionStatus: "connecting" | "connected" | "disconnected" | "error", focusInput: () => void) => { + setTerminalRef({ sendData, connectionStatus, focusInput }); }, [] ); @@ -93,12 +94,14 @@ export const MobileTerminalWrapper: React.FC = ({ onSend={handleSendKey} isVisible={keysAutoHide.isVisible && !showPanel} onMoreClick={() => setShowPanel(true)} + onKeepFocus={() => terminalRef?.focusInput()} /> setShowPanel(false)} + onKeepFocus={() => terminalRef?.focusInput()} /> ); diff --git a/apps/web/src/components/special-keys-panel.tsx b/apps/web/src/components/special-keys-panel.tsx index 9e52492..0136f54 100644 --- a/apps/web/src/components/special-keys-panel.tsx +++ b/apps/web/src/components/special-keys-panel.tsx @@ -5,6 +5,7 @@ interface SpecialKeysPanelProps { onSend: (data: string) => void; isOpen: boolean; onClose: () => void; + onKeepFocus?: () => void; } const EXPANDED_KEYS: { key: SpecialKey; label: string }[] = [ @@ -36,11 +37,19 @@ export const SpecialKeysPanel: React.FC = ({ onSend, isOpen, onClose, + onKeepFocus, }) => { const { sendKey } = useSpecialKeys({ onSend }); if (!isOpen) return null; + const handlePointerDown = (e: React.PointerEvent, key: SpecialKey) => { + e.preventDefault(); + sendKey(key); + onClose(); + onKeepFocus?.(); + }; + return (
= ({