import { Subject } from 'rxjs';
import { Actions } from '../engine/actions';
import { EngineContext, InjectEngineContext } from '../engine/context';
import { RxStore, RxStoreOptions } from '../engine/rx-store';
import { Ctx } from '../internal-types';
import { Emitter } from '../utils/emitter';
import { KeyBindingMap, KeyBindingName } from '../utils/keyboard-shortcut';
export type AppContext = EngineContext & {
    actions: Actions;
    store: RxStore;
    keyBindingMap: KeyBindingMap;
    shortcut$: Subject<{
        type: KeyBindingName;
        event: KeyboardEvent;
    }>;
    keydown$: Subject<KeyboardEvent>;
    emitter: Emitter;
};
export type InjectAppContext = InjectEngineContext;
export declare function createAppContext(ctx: InjectAppContext, options?: RxStoreOptions): AppContext;
export declare const appContext: import('@dineug/r-html').Context<AppContext>;
export declare const useAppContext: (ctx: Ctx, fallback?: AppContext) => import('@dineug/r-html').Ref<AppContext>;
export declare function appDestroy(app: AppContext): void;
