/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { Emitter, Event } from '@sussudio/base/common/event.mjs';
import { ResolvedKeybinding, Keybinding } from '@sussudio/base/common/keybindings.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { ICommandService } from '../../commands/common/commands.mjs';
import { IContextKeyService, IContextKeyServiceTarget } from '../../contextkey/common/contextkey.mjs';
import { IKeybindingService, IKeyboardEvent, KeybindingsSchemaContribution } from './keybinding.mjs';
import { IResolveResult, KeybindingResolver } from './keybindingResolver.mjs';
import { ResolvedKeybindingItem } from './resolvedKeybindingItem.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { INotificationService } from '../../notification/common/notification.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
export declare abstract class AbstractKeybindingService extends Disposable implements IKeybindingService {
	private _contextKeyService;
	protected _commandService: ICommandService;
	protected _telemetryService: ITelemetryService;
	private _notificationService;
	protected _logService: ILogService;
	_serviceBrand: undefined;
	protected readonly _onDidUpdateKeybindings: Emitter<void>;
	get onDidUpdateKeybindings(): Event<void>;
	private _currentChord;
	private _currentChordChecker;
	private _currentChordStatusMessage;
	private _ignoreSingleModifiers;
	private _currentSingleModifier;
	private _currentSingleModifierClearTimeout;
	protected _logging: boolean;
	get inChordMode(): boolean;
	constructor(
		_contextKeyService: IContextKeyService,
		_commandService: ICommandService,
		_telemetryService: ITelemetryService,
		_notificationService: INotificationService,
		_logService: ILogService,
	);
	dispose(): void;
	protected abstract _getResolver(): KeybindingResolver;
	protected abstract _documentHasFocus(): boolean;
	abstract resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[];
	abstract resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;
	abstract resolveUserBinding(userBinding: string): ResolvedKeybinding[];
	abstract registerSchemaContribution(contribution: KeybindingsSchemaContribution): void;
	abstract _dumpDebugInfo(): string;
	abstract _dumpDebugInfoJSON(): string;
	getDefaultKeybindingsContent(): string;
	toggleLogging(): boolean;
	protected _log(str: string): void;
	getDefaultKeybindings(): readonly ResolvedKeybindingItem[];
	getKeybindings(): readonly ResolvedKeybindingItem[];
	customKeybindingsCount(): number;
	lookupKeybindings(commandId: string): ResolvedKeybinding[];
	lookupKeybinding(commandId: string, context?: IContextKeyService): ResolvedKeybinding | undefined;
	dispatchEvent(e: IKeyboardEvent, target: IContextKeyServiceTarget): boolean;
	softDispatch(e: IKeyboardEvent, target: IContextKeyServiceTarget): IResolveResult | null;
	private _enterMultiChordMode;
	private _leaveChordMode;
	dispatchByUserSettingsLabel(userSettingsLabel: string, target: IContextKeyServiceTarget): void;
	protected _dispatch(e: IKeyboardEvent, target: IContextKeyServiceTarget): boolean;
	protected _singleModifierDispatch(e: IKeyboardEvent, target: IContextKeyServiceTarget): boolean;
	private _doDispatch;
	mightProducePrintableCharacter(event: IKeyboardEvent): boolean;
}
