import { IRouter } from '../Router'; export declare type Routers = { [key: string]: IRouter; }; export declare type UnregisterCallback = () => void; export declare enum AppEventType { RouterAdd = "routeradd", RouterRemove = "routerremove" } export declare type RouterAddEvent = { readonly type: AppEventType.RouterAdd; readonly key: string; readonly router: IRouter; }; export declare type RouterRemoveEvent = { readonly type: AppEventType.RouterRemove; readonly key: string; }; export declare type AppEvent = RouterAddEvent | RouterRemoveEvent; export declare type AppEventHandler = (event: T extends AppEventType.RouterAdd ? RouterAddEvent : T extends AppEventType.RouterRemove ? RouterRemoveEvent : AppEvent) => void; declare function addEventListener(type: AppEventType, handler: AppEventHandler): UnregisterCallback; declare function addEventListener(handler: AppEventHandler): UnregisterCallback; declare function removeEventListener(type: AppEventType, handler: AppEventHandler): void; declare function removeEventListener(handler: AppEventHandler): void; export interface IApp { readonly modals: IRouter; readonly routers: Routers; addEventListener: typeof addEventListener; removeEventListener: typeof removeEventListener; addModal: IRouter['push']; removeModal: (key: string) => void; addRouter: (key: string, router: IRouter) => void; removeRouter: (key: string) => void; } export {};