import { IKeypressEvent } from '../events/types';
import { Observable } from 'rxjs';
export { IKeypressEvent };
export declare type KeyCommand = string;
export declare type KeyBindings<T extends KeyCommand> = KeyBinding<T>[];
export declare type KeyBinding<T extends KeyCommand> = {
    command: T;
    key: string;
};
export declare type ModifierKey = 'ALT' | 'CTRL' | 'SHIFT' | 'META';
export declare type IKeyPattern = {
    keys: string[];
    modifiers: ModifierKey[];
};
export declare type IKeyMatchEventArgs = {
    key: string;
    altKey: boolean;
    ctrlKey: boolean;
    shiftKey: boolean;
    metaKey: boolean;
};
export declare type IKeyBindingEvent<T extends KeyCommand> = {
    command: T;
    key: string;
    preventDefault(): void;
    stopPropagation(): void;
    stopImmediatePropagation(): void;
    cancel(): void;
};
export declare type IKeyboardArgs<T extends KeyCommand> = {
    bindings?: KeyBindings<T>;
    keyPress$?: Observable<IKeypressEvent>;
    dispose$?: Observable<void>;
};
export declare type IKeyboard<T extends KeyCommand> = {
    isDisposed: boolean;
    dispose$: Observable<void>;
    dispose(): void;
    clone(options?: Partial<IKeyboardArgs<T>>): IKeyboard<T>;
    filter(fn: (e: IKeypressEvent) => boolean): IKeyboard<T>;
    takeUntil(dispose$: Observable<void>): IKeyboard<T>;
};
