import { IKeyboardEvent } from "../../keybinding/common/keybinding.js";
import { IPickerQuickAccessItem } from "../../quickinput/browser/pickerQuickAccess.js";
import { Event } from "../../../base/common/event.js";
import { IAction } from "../../../base/common/actions.js";
import { IQuickPickItem } from "../../quickinput/common/quickInput.js";
import { IDisposable, Disposable } from "../../../base/common/lifecycle.js";
export declare enum AccessibleViewProviderId {
    Terminal = "terminal",
    TerminalChat = "terminal-chat",
    TerminalHelp = "terminal-help",
    DiffEditor = "diffEditor",
    MergeEditor = "mergeEditor",
    PanelChat = "panelChat",
    ChatTerminalOutput = "chatTerminalOutput",
    ChatThinking = "chatThinking",
    InlineChat = "inlineChat",
    AgentChat = "agentChat",
    QuickChat = "quickChat",
    InlineCompletions = "inlineCompletions",
    KeybindingsEditor = "keybindingsEditor",
    Notebook = "notebook",
    ReplEditor = "replEditor",
    Editor = "editor",
    Hover = "hover",
    Notification = "notification",
    EmptyEditorHint = "emptyEditorHint",
    Comments = "comments",
    CommentThread = "commentThread",
    Repl = "repl",
    ReplHelp = "replHelp",
    RunAndDebug = "runAndDebug",
    Walkthrough = "walkthrough",
    SourceControl = "scm",
    EditorFindHelp = "editorFindHelp",
    SearchHelp = "searchHelp",
    TerminalFindHelp = "terminalFindHelp",
    WebviewFindHelp = "webviewFindHelp",
    OutputFindHelp = "outputFindHelp",
    ProblemsFilterHelp = "problemsFilterHelp"
}
export declare enum AccessibleViewType {
    Help = "help",
    View = "view"
}
export declare enum NavigationType {
    Previous = "previous",
    Next = "next"
}
export interface IAccessibleViewOptions {
    readMoreUrl?: string;
    /**
     * Defaults to markdown
     */
    language?: string;
    type: AccessibleViewType;
    /**
     * By default, places the cursor on the top line of the accessible view.
     * If set to 'initial-bottom', places the cursor on the bottom line of the accessible view and preserves it henceforth.
     * If set to 'bottom', places the cursor on the bottom line of the accessible view.
     */
    position?: "bottom" | "initial-bottom";
    /**
     * @returns a string that will be used as the content of the help dialog
     * instead of the one provided by default.
     */
    customHelp?: () => string;
    /**
     * If this provider might want to request to be shown again, provide an ID.
     */
    id?: AccessibleViewProviderId;
    /**
     * Keybinding items to configure
     */
    configureKeybindingItems?: IQuickPickItem[];
    /**
     * Keybinding items that are already configured
     */
    configuredKeybindingItems?: IQuickPickItem[];
}
export interface IAccessibleViewContentProvider extends IBasicContentProvider, IDisposable {
    id: AccessibleViewProviderId;
    verbositySettingKey: string;
    /**
     * Note that a Codicon class should be provided for each action.
     * If not, a default will be used.
     */
    onKeyDown?(e: IKeyboardEvent): void;
    /**
     * When the language is markdown, this is provided by default.
     */
    getSymbols?(): IAccessibleViewSymbol[];
    /**
     * Note that this will only take effect if the provider has an ID.
     */
    readonly onDidRequestClearLastProvider?: Event<AccessibleViewProviderId>;
}
export interface IAccessibleViewSymbol extends IPickerQuickAccessItem {
    markdownToParse?: string;
    firstListItem?: string;
    lineNumber?: number;
    endLineNumber?: number;
}
export interface IPosition {
    lineNumber: number;
    column: number;
}
export interface ICodeBlockActionContext {
    code: string;
    languageId?: string;
    codeBlockIndex: number;
    element: unknown;
}
export type AccesibleViewContentProvider = AccessibleContentProvider | ExtensionContentProvider;
export declare class AccessibleContentProvider extends Disposable implements IAccessibleViewContentProvider {
    id: AccessibleViewProviderId;
    options: IAccessibleViewOptions;
    provideContent: () => string;
    onClose: () => void;
    verbositySettingKey: string;
    onOpen?: (() => void) | undefined;
    actions?: IAction[] | undefined;
    provideNextContent?: (() => string | undefined) | undefined;
    providePreviousContent?: (() => string | undefined) | undefined;
    onDidChangeContent?: Event<void> | undefined;
    onKeyDown?: ((e: IKeyboardEvent) => void) | undefined;
    getSymbols?: (() => IAccessibleViewSymbol[]) | undefined;
    onDidRequestClearLastProvider?: Event<AccessibleViewProviderId> | undefined;
    constructor(id: AccessibleViewProviderId, options: IAccessibleViewOptions, provideContent: () => string, onClose: () => void, verbositySettingKey: string, onOpen?: (() => void) | undefined, actions?: IAction[] | undefined, provideNextContent?: (() => string | undefined) | undefined, providePreviousContent?: (() => string | undefined) | undefined, onDidChangeContent?: Event<void> | undefined, onKeyDown?: ((e: IKeyboardEvent) => void) | undefined, getSymbols?: (() => IAccessibleViewSymbol[]) | undefined, onDidRequestClearLastProvider?: Event<AccessibleViewProviderId> | undefined);
}
export declare function isIAccessibleViewContentProvider(obj: unknown): obj is IAccessibleViewContentProvider;
export declare class ExtensionContentProvider extends Disposable implements IBasicContentProvider {
    readonly id: string;
    options: IAccessibleViewOptions;
    provideContent: () => string;
    onClose: () => void;
    onOpen?: (() => void) | undefined;
    provideNextContent?: (() => string | undefined) | undefined;
    providePreviousContent?: (() => string | undefined) | undefined;
    actions?: IAction[] | undefined;
    onDidChangeContent?: Event<void> | undefined;
    constructor(id: string, options: IAccessibleViewOptions, provideContent: () => string, onClose: () => void, onOpen?: (() => void) | undefined, provideNextContent?: (() => string | undefined) | undefined, providePreviousContent?: (() => string | undefined) | undefined, actions?: IAction[] | undefined, onDidChangeContent?: Event<void> | undefined);
}
export interface IBasicContentProvider extends IDisposable {
    id: string;
    options: IAccessibleViewOptions;
    onClose(): void;
    provideContent(): string;
    onOpen?(): void;
    actions?: IAction[];
    providePreviousContent?(): void;
    provideNextContent?(): void;
    readonly onDidChangeContent?: Event<void>;
}
