import { ICodeEditor, IEditorMouseEvent } from "../../../../editor/browser/editorBrowser.js";
import { ICodeEditorService } from "../../../../editor/browser/services/codeEditorService.service.js";
import { IRange, Range } from "../../../../editor/common/core/range.js";
import { IEditorContribution } from "../../../../editor/common/editorCommon.js";
import * as languages from "../../../../editor/common/languages.js";
import { IContextMenuService } from "../../../../platform/contextview/browser/contextView.service.js";
import { IInstantiationService } from "../../../../platform/instantiation/common/instantiation.js";
import { IQuickInputService } from "../../../../platform/quickinput/common/quickInput.service.js";
import { ICommentService } from "./commentService.service.js";
import { CommentWidgetFocus, ReviewZoneWidget } from "./commentThreadZoneWidget.js";
import { IEditorService } from "../../../services/editor/common/editorService.service.js";
import { IViewsService } from "../../../services/views/common/viewsService.service.js";
import { IConfigurationService } from "../../../../platform/configuration/common/configuration.service.js";
import { IContextKeyService } from "../../../../platform/contextkey/common/contextkey.service.js";
import { IKeybindingService } from "../../../../platform/keybinding/common/keybinding.service.js";
import { IAccessibilityService } from "../../../../platform/accessibility/common/accessibility.service.js";
import { IUriIdentityService } from "../../../../platform/uriIdentity/common/uriIdentity.service.js";
import { INotificationService } from "../../../../platform/notification/common/notification.service.js";
export declare const ID = "editor.contrib.review";
/**
* Navigate to the next or previous comment in the current thread.
* @param type
*/
export declare function moveToNextCommentInThread(commentInfo: {
    thread: languages.CommentThread<IRange>;
    comment?: languages.Comment;
} | undefined, type: "next" | "previous"): {
    comment: languages.Comment;
    thread: languages.CommentThread<IRange>;
} | undefined;
export declare function revealCommentThread(commentService: ICommentService, editorService: IEditorService, uriIdentityService: IUriIdentityService, commentThread: languages.CommentThread<IRange>, comment: languages.Comment | undefined, focusReply?: boolean, pinned?: boolean, preserveFocus?: boolean, sideBySide?: boolean): void;
export declare class CommentController implements IEditorContribution {
    private readonly commentService;
    private readonly instantiationService;
    private readonly codeEditorService;
    private readonly contextMenuService;
    private readonly quickInputService;
    private readonly viewsService;
    private readonly configurationService;
    private readonly editorService;
    private readonly keybindingService;
    private readonly accessibilityService;
    private readonly notificationService;
    private readonly globalToDispose;
    private readonly localToDispose;
    private editor;
    private _commentWidgets;
    private _commentInfos;
    private _commentingRangeDecorator;
    private _commentThreadRangeDecorator;
    private mouseDownInfo;
    private _commentingRangeSpaceReserved;
    private _commentingRangeAmountReserved;
    private _computePromise;
    private _computeAndSetPromise;
    private _addInProgress;
    private _emptyThreadsToAddQueue;
    private _computeCommentingRangeScheduler;
    private _pendingNewCommentCache;
    private _pendingEditsCache;
    private _inProcessContinueOnComments;
    private _editorDisposables;
    private _activeCursorHasCommentingRange;
    private _activeCursorHasComment;
    private _activeEditorHasCommentingRange;
    private _commentWidgetVisible;
    private _hasRespondedToEditorChange;
    constructor(editor: ICodeEditor, commentService: ICommentService, instantiationService: IInstantiationService, codeEditorService: ICodeEditorService, contextMenuService: IContextMenuService, quickInputService: IQuickInputService, viewsService: IViewsService, configurationService: IConfigurationService, contextKeyService: IContextKeyService, editorService: IEditorService, keybindingService: IKeybindingService, accessibilityService: IAccessibilityService, notificationService: INotificationService);
    private registerEditorListeners;
    private clearEditorListeners;
    private onEditorMouseLeave;
    private onEditorMouseMove;
    private onEditorChangeCursorSelection;
    private onEditorChangeCursorPosition;
    private isEditorInlineOriginal;
    private beginCompute;
    private beginComputeCommentingRanges;
    static get(editor: ICodeEditor): CommentController | null;
    revealCommentThread(threadId: string, commentUniqueId: number | undefined, fetchOnceIfNotExist: boolean, focus: CommentWidgetFocus): void;
    collapseAll(): void;
    collapseVisibleComments(): Promise<void>;
    private _updateCommentWidgetVisibleContext;
    expandAll(): void;
    expandUnresolved(): void;
    nextCommentThread(focusThread: boolean): void;
    private _findNearestCommentThread;
    previousCommentThread(focusThread: boolean): void;
    private _findNearestCommentingRange;
    nextCommentingRange(): void;
    previousCommentingRange(): void;
    dispose(): void;
    private onWillChangeModel;
    private handleCommentAdded;
    onModelChanged(): void;
    private resumePendingComment;
    private beginComputeAndHandleEditorChange;
    private openCommentsView;
    private displayCommentThread;
    private onEditorMouseDown;
    private onEditorMouseUp;
    getCommentsAtLine(commentRange: Range | undefined): ReviewZoneWidget[];
    addOrToggleCommentAtLine(commentRange: Range | undefined, e: IEditorMouseEvent | undefined): Promise<void>;
    private processNextThreadToAdd;
    private clipUserRangeToCommentRange;
    addCommentAtLine(range: Range | undefined, e: IEditorMouseEvent | undefined): Promise<void>;
    private getCommentProvidersQuickPicks;
    private getContextMenuActions;
    addCommentAtLine2(range: Range | undefined, ownerId: string): void;
    private getExistingCommentEditorOptions;
    private getWithoutCommentsEditorOptions;
    private getWithCommentsLineDecorationWidth;
    private getWithCommentsEditorOptions;
    private updateEditorLayoutOptions;
    private ensureCommentingRangeReservedAmount;
    private tryUpdateReservedSpace;
    private setComments;
    collapseAndFocusRange(threadId: string): void;
    private removeCommentWidgetsAndStoreCache;
}
