import { StyleSheet, View } from 'react-native' import { MobileNativeChatView, type MobileNativeChatInputLockReason } from './MobileNativeChatView' import type { MobileNativeChatController } from './use-mobile-native-chat-controller' import type { MobileNativeChatPendingImage } from './use-mobile-native-chat-pending-images' type Props = { controller: MobileNativeChatController onAttachImage: () => void isAttaching: boolean /** Overrides the controller's plain-text send (e.g. to deliver pending image * attachments first). Falls back to controller.handleNativeChatSend. */ onSend?: (text: string) => Promise pendingImages?: readonly MobileNativeChatPendingImage[] onRemovePendingImage?: (id: string) => void onMicPress: () => void micActive: boolean dictationMode: 'toggle' | 'hold' onMicPressIn: () => void onMicPressOut: () => void inputLockReason: MobileNativeChatInputLockReason | null keyboardInset: number } /** Keeps the terminal mounted underneath chat so its PTY subscription survives * view toggles while the native surface owns the visible composer. */ export function MobileNativeChatOverlay({ controller, onAttachImage, isAttaching, onSend, pendingImages, onRemovePendingImage, onMicPress, micActive, dictationMode, onMicPressIn, onMicPressOut, inputLockReason, keyboardInset }: Props): React.JSX.Element | null { if (!controller.showNativeChat) { return null } const session = controller.nativeChatSession return ( ) } const styles = StyleSheet.create({ overlay: StyleSheet.absoluteFillObject })