import { NativeModules, NativeEventEmitter, EmitterSubscription, Insets, Platform } from 'react-native'; export interface Module { setVerbose(verbose: boolean): void; enableSafeAreaEvent(enable: boolean): void; getSafeArea(): Promise; measureViewInsets(node: number): Promise>; getCompatInfo(): Promise<{ statusBarHeight?: number; actionBarHeight?: number; navigationBarHeight?: number; decorViewRect?: Required; }>; } export interface SafeAreaEvent { stableInsets: Required; systemWindowInsets: Required; displayCutouts?: Required[]; } export const Module = (Platform.OS === 'android') ? NativeModules.ReactNativeMoSafeArea as Module : undefined; export const Events = Module ? new NativeEventEmitter(NativeModules.ReactNativeMoSafeArea) as { addListener(eventType: 'ReactNativeMoSafeArea', listener: (event: SafeAreaEvent) => void): EmitterSubscription; } : undefined;