import type { ComponentType } from "react";import type { NativeSyntheticEvent, ViewProps } from "react-native";import { requireNativeViewManager } from "expo-modules-core"; const NATIVE_TERMINAL_MODULE_NAME = "T3TerminalSurface"; interface ExpoGlobalWithViewConfig { readonly expo?: { getViewConfig?: (moduleName: string, viewName?: string) => unknown; };} interface TerminalInputEvent { readonly data: string;} interface TerminalResizeEvent { readonly cols: number; readonly rows: number;} export interface NativeTerminalSurfaceProps extends ViewProps { readonly appearanceScheme?: "light" | "dark"; readonly themeConfig?: string; readonly backgroundColor?: string; readonly foregroundColor?: string; readonly mutedForegroundColor?: string; readonly terminalKey: string; readonly initialBuffer: string; readonly fontSize: number; readonly onInput?: (event: NativeSyntheticEvent<TerminalInputEvent>) => void; readonly onResize?: (event: NativeSyntheticEvent<TerminalResizeEvent>) => void;} let cachedNativeTerminalSurfaceView: ComponentType<NativeTerminalSurfaceProps> | undefined; function getExpoViewConfig(moduleName: string) { return (globalThis as typeof globalThis & ExpoGlobalWithViewConfig).expo?.getViewConfig?.( moduleName, );} export function resolveNativeTerminalSurfaceView(): ComponentType<NativeTerminalSurfaceProps> | null { if (cachedNativeTerminalSurfaceView) { return cachedNativeTerminalSurfaceView; } if (getExpoViewConfig(NATIVE_TERMINAL_MODULE_NAME) == null) { return null; } try { cachedNativeTerminalSurfaceView = requireNativeViewManager<NativeTerminalSurfaceProps>( NATIVE_TERMINAL_MODULE_NAME, ); } catch { return null; } return cachedNativeTerminalSurfaceView ?? null;} export function hasNativeTerminalSurface() { return resolveNativeTerminalSurfaceView() !== null;}
import type { ComponentType } from "react";
import type { NativeSyntheticEvent, ViewProps } from "react-native";
import { requireNativeViewManager } from "expo-modules-core";
const NATIVE_TERMINAL_MODULE_NAME = "T3TerminalSurface";
interface ExpoGlobalWithViewConfig {
readonly expo?: {
getViewConfig?: (moduleName: string, viewName?: string) => unknown;
};
}
interface TerminalInputEvent {
readonly data: string;
}
interface TerminalResizeEvent {
readonly cols: number;
readonly rows: number;
}
export interface NativeTerminalSurfaceProps extends ViewProps {
readonly appearanceScheme?: "light" | "dark";
readonly themeConfig?: string;
readonly backgroundColor?: string;
readonly foregroundColor?: string;
readonly mutedForegroundColor?: string;
readonly terminalKey: string;
readonly initialBuffer: string;
readonly fontSize: number;
readonly onInput?: (event: NativeSyntheticEvent<TerminalInputEvent>) => void;
readonly onResize?: (event: NativeSyntheticEvent<TerminalResizeEvent>) => void;
}
let cachedNativeTerminalSurfaceView: ComponentType<NativeTerminalSurfaceProps> | undefined;
function getExpoViewConfig(moduleName: string) {
return (globalThis as typeof globalThis & ExpoGlobalWithViewConfig).expo?.getViewConfig?.(
moduleName,
);
}
export function resolveNativeTerminalSurfaceView(): ComponentType<NativeTerminalSurfaceProps> | null {
if (cachedNativeTerminalSurfaceView) {
return cachedNativeTerminalSurfaceView;
}
if (getExpoViewConfig(NATIVE_TERMINAL_MODULE_NAME) == null) {
return null;
}
try {
cachedNativeTerminalSurfaceView = requireNativeViewManager<NativeTerminalSurfaceProps>(
NATIVE_TERMINAL_MODULE_NAME,
);
} catch {
return null;
}
return cachedNativeTerminalSurfaceView ?? null;
}
export function hasNativeTerminalSurface() {
return resolveNativeTerminalSurfaceView() !== null;
}