import { FieldProcessor } from '@ephox/boulder';
import { Optional } from '@ephox/katamari';
import { EventArgs } from '@ephox/sugar';
import { AlloyComponent } from '../api/component/ComponentApi';
import * as AlloyEvents from '../api/events/AlloyEvents';
import { BehaviourState } from '../behaviour/common/BehaviourState';
import { NativeSimulatedEvent, SimulatedEvent } from '../events/SimulatedEvent';
import * as KeyRules from '../navigation/KeyRules';
import { GeneralKeyingConfig } from './KeyingModeTypes';
declare type GetRulesFunc<C extends GeneralKeyingConfig, S extends BehaviourState> = (component: AlloyComponent, simulatedEvent: SimulatedEvent<EventArgs>, keyingConfig: C, keyingState: S) => Array<KeyRules.KeyRule<C, S>>;
export interface KeyingType<C extends GeneralKeyingConfig, S extends BehaviourState> {
    readonly schema: () => FieldProcessor[];
    readonly processKey: (component: AlloyComponent, simulatedEvent: NativeSimulatedEvent<KeyboardEvent>, getRules: GetRulesFunc<C, S>, keyingConfig: C, keyingState: S) => Optional<boolean>;
    readonly toEvents: (keyingConfig: C, keyingState: S) => AlloyEvents.AlloyEventRecord;
}
declare const typical: <C extends GeneralKeyingConfig, S extends BehaviourState>(infoSchema: FieldProcessor[], stateInit: (config: C) => BehaviourState, getKeydownRules: (comp: AlloyComponent, se: NativeSimulatedEvent<Event>, config: C, state: S) => KeyRules.KeyRule<C, S>[], getKeyupRules: (comp: AlloyComponent, se: NativeSimulatedEvent<Event>, config: C, state: S) => KeyRules.KeyRule<C, S>[], optFocusIn: (config: C) => Optional<(comp: AlloyComponent, config: C, state: S) => void>) => KeyingType<C, S>;
export { typical };
//# sourceMappingURL=KeyingType.d.ts.map