import { Except } from 'type-fest';
import { AllKeyCodes } from './types/keyCodes';
import { ControEvents, CreateControlsSchemaOptions, InputCommandsSchema, InputGroupedCommandsSchema, InputSchemaArg, SchemaCommand } from './types';
import { GamepadButtonName } from './gamepad';
import { UserOverridesConfig } from './types/store';
import { TypedEventEmitter } from './typedEventEmitter';
type MovementVectorType = '2d' | '3d';
export declare class ControMax<T extends InputCommandsSchema, K extends InputGroupedCommandsSchema, M extends MovementVectorType, D extends {
    movementVector?: M;
} & InputSchemaArg<T, K>> extends TypedEventEmitter<ControEvents<D['commands'], K, M>> {
    options: CreateControlsSchemaOptions;
    /** type only @deprecated */
    _commandsRaw: D['commands'];
    inputSchema: Except<D, 'commands'> & {
        commands: {
            [G in keyof T]: {
                [C in keyof T[G]]: SchemaCommand;
            };
        };
    };
    /** Raw set of all pressed key at the moment */
    pressedKeys: ReadonlySet<AllKeyCodes>;
    /** Disable input handling. */
    enabled: boolean;
    userConfig: UserOverridesConfig | undefined;
    pressedKeyOrButtonChanged: (codeOrButton: {
        code: AllKeyCodes;
    } | {
        gamepadIndex: number;
        button: GamepadButtonName;
    }, buttonPressed: boolean, options?: {
        preventDefault?: (() => void) | undefined;
    }) => void;
    private handleMovementKeyInternal;
    constructor(inputSchema: D, options?: CreateControlsSchemaOptions);
    trigger<T1 extends keyof T>(category: T1, command: keyof T[T1]): void;
    triggerGroupedCommand<K1 extends keyof K>(category: K1, command: keyof K[K1], indexOrKey: (K[K1] extends [Array<infer U>, ...any] ? U : string) | number): void;
    /**
     * Trigger movement in a specific direction programmatically.
     * @param direction - Movement direction: 'forward' (or 'up'), 'backward' (or 'down'), 'left', 'right'
     * @param pressed - true for keydown/press, false for keyup/release
     */
    setMovement(direction: 'forward' | 'backward' | 'left' | 'right' | 'up' | 'down', pressed: boolean): void;
}
export {};
