// Dispatches a leaf's session to the right body — TerminalPane for a PTY // session, StructuredPane for an ACP one (session.view, #133/#140/#249). import { forwardRef, useImperativeHandle, useRef } from "react"; import type { Session, Uuid } from "../../types.js"; import { StructuredPane, type StructuredPaneHandle } from "../structured/StructuredPane.js"; import { TerminalPane, type TerminalPaneHandle } from "../terminal/TerminalPane.js"; export interface PaneContainerHandle { focusTerminal(): void; /** No-op for a structured pane — it has no PTY (pane.ts's PaneConnection contract). */ sendInput(data: string): void; } export interface PaneContainerProps { sessionId: Uuid; session?: Session; /** Grabs the keyboard once connected. A sidebar preview passes `false`. */ focus?: boolean; onClosed?: () => void; className?: string; } export const PaneContainer = forwardRef(function PaneContainer( { sessionId, session, focus, onClosed, className }, ref, ) { const terminalRef = useRef(null); const structuredRef = useRef(null); useImperativeHandle( ref, () => ({ focusTerminal: () => { terminalRef.current?.focusTerminal(); structuredRef.current?.focusComposer(); }, sendInput: (data: string) => terminalRef.current?.sendInput(data), }), [], ); return session?.view === "Structured" ? ( ) : ( ); });