b6bda3d692
- Add mobile viewport detection hook - Add virtual keyboard detection with fallback - Add auto-hide hook for header/keys strip - Add special keys mapping hook - Create MobileTerminalHeader, SpecialKeysStrip, SpecialKeysPanel components - Create MobileTerminalWrapper component - Update TerminalComponent with mobile support, font scaling, copy/paste, reconnection - Update AppShell to hide chrome on mobile terminal pages - Update TerminalPage to use MobileTerminalWrapper - Add comprehensive mobile terminal styles - TypeScript check passes - Build succeeds
73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
import React from "react";
|
|
import { Icon } from "./icon";
|
|
|
|
interface MobileTerminalHeaderProps {
|
|
instanceName?: string;
|
|
onBack?: () => void;
|
|
onMenuToggle?: () => void;
|
|
onClose?: () => void;
|
|
isVisible: boolean;
|
|
connectionStatus?: "connecting" | "connected" | "disconnected" | "error";
|
|
}
|
|
|
|
export const MobileTerminalHeader: React.FC<MobileTerminalHeaderProps> = ({
|
|
instanceName,
|
|
onBack,
|
|
onMenuToggle,
|
|
onClose,
|
|
isVisible,
|
|
connectionStatus = "connecting",
|
|
}) => {
|
|
return (
|
|
<div
|
|
className={`mobile-terminal-header ${isVisible ? "visible" : "hidden"}`}
|
|
>
|
|
<div className="mobile-terminal-header-left">
|
|
{onBack && (
|
|
<button
|
|
className="mobile-terminal-header-button"
|
|
onClick={onBack}
|
|
type="button"
|
|
aria-label="Go back"
|
|
>
|
|
<Icon name="arrow-left" size="sm" />
|
|
</button>
|
|
)}
|
|
{onMenuToggle && (
|
|
<button
|
|
className="mobile-terminal-header-button"
|
|
onClick={onMenuToggle}
|
|
type="button"
|
|
aria-label="Toggle menu"
|
|
>
|
|
<Icon name="menu" size="sm" />
|
|
</button>
|
|
)}
|
|
</div>
|
|
|
|
<div className="mobile-terminal-header-center">
|
|
<span className="mobile-terminal-header-title">
|
|
{instanceName || "Terminal"}
|
|
</span>
|
|
<span
|
|
className={`mobile-terminal-header-status ${connectionStatus}`}
|
|
aria-label={`Connection status: ${connectionStatus}`}
|
|
/>
|
|
</div>
|
|
|
|
<div className="mobile-terminal-header-right">
|
|
{onClose && (
|
|
<button
|
|
className="mobile-terminal-header-button"
|
|
onClick={onClose}
|
|
type="button"
|
|
aria-label="Close terminal"
|
|
>
|
|
<Icon name="close" size="sm" />
|
|
</button>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|