import { UriComponents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
import { ICodeEditorService } from "@codingame/monaco-vscode-api/vscode/vs/editor/browser/services/codeEditorService.service";
import { IRange } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range";
import { ISelection } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/selection";
import { IDecorationOptions, IDecorationRenderOptions } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/editorCommon";
import { ISingleEditOperation } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/editOperation";
import { MainThreadTextEditor } from "./mainThreadEditor.js";
import { IApplyEditsOptions, ITextDocumentShowOptions, ITextEditorConfigurationUpdate, IUndoStopOptions, MainThreadTextEditorsShape, TextEditorRevealType } from "@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol";
import { EditorGroupColumn } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorGroupColumn";
import { IEditorService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service";
import { IEditorGroupsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorGroupsService.service";
import { ExtensionIdentifier } from "@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions";
import { IChange } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/diff/legacyLinesDiffComputer";
import { IExtHostContext } from "../../services/extensions/common/extHostCustomers.js";
import { IEditorControl } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/editor";
import { ICodeEditor } from "@codingame/monaco-vscode-api/vscode/vs/editor/browser/editorBrowser";
import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
import { IQuickDiffModelService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/scm/browser/quickDiffModel.service";
import { IUriIdentityService } from "@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service";
export interface IMainThreadEditorLocator {
    getEditor(id: string): MainThreadTextEditor | undefined;
    findTextEditorIdFor(editorControl: IEditorControl): string | undefined;
    getIdOfCodeEditor(codeEditor: ICodeEditor): string | undefined;
}
export declare class MainThreadTextEditors implements MainThreadTextEditorsShape {
    private readonly _editorLocator;
    private readonly _codeEditorService;
    private readonly _editorService;
    private readonly _editorGroupService;
    private readonly _configurationService;
    private readonly _quickDiffModelService;
    private readonly _uriIdentityService;
    private static INSTANCE_COUNT;
    private readonly _instanceId;
    private readonly _proxy;
    private readonly _toDispose;
    private _textEditorsListenersMap;
    private _editorPositionData;
    private _registeredDecorationTypes;
    constructor(_editorLocator: IMainThreadEditorLocator, extHostContext: IExtHostContext, _codeEditorService: ICodeEditorService, _editorService: IEditorService, _editorGroupService: IEditorGroupsService, _configurationService: IConfigurationService, _quickDiffModelService: IQuickDiffModelService, _uriIdentityService: IUriIdentityService);
    dispose(): void;
    handleTextEditorAdded(textEditor: MainThreadTextEditor): void;
    handleTextEditorRemoved(id: string): void;
    private _updateActiveAndVisibleTextEditors;
    private _getTextEditorPositionData;
    private _getTextEditorDiffInformation;
    $tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): Promise<string | undefined>;
    $tryShowEditor(id: string, position?: EditorGroupColumn): Promise<void>;
    $tryHideEditor(id: string): Promise<void>;
    $trySetSelections(id: string, selections: ISelection[]): Promise<void>;
    $trySetDecorations(id: string, key: string, ranges: IDecorationOptions[]): Promise<void>;
    $trySetDecorationsFast(id: string, key: string, ranges: number[]): Promise<void>;
    $tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): Promise<void>;
    $trySetOptions(id: string, options: ITextEditorConfigurationUpdate): Promise<void>;
    $tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): Promise<boolean>;
    $tryInsertSnippet(id: string, modelVersionId: number, template: string, ranges: readonly IRange[], opts: IUndoStopOptions): Promise<boolean>;
    $registerTextEditorDecorationType(extensionId: ExtensionIdentifier, key: string, options: IDecorationRenderOptions): void;
    $removeTextEditorDecorationType(key: string): void;
    $getDiffInformation(id: string): Promise<IChange[]>;
}
