import { IDisposable } from "../../../../../../base/common/lifecycle.js";
import { ChatTreeItem, IChatCodeBlockInfo } from "../../chat.js";
import { IChatRendererContent, IChatRequestViewModel, IChatResponseViewModel } from "../../../common/model/chatViewModel.js";
import { CodeBlockModelCollection } from "@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/common/widget/codeBlockModelCollection";
import { DiffEditorPool, EditorPool } from "@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentCodePools";
import { IObservable } from "../../../../../../base/common/observable.js";
import { Event } from "../../../../../../base/common/event.js";
export interface IChatContentPart extends IDisposable {
    domNode: HTMLElement | undefined;
    /**
     * Used to indicate a part's ownership of a code block.
     */
    codeblocksPartId?: string;
    /**
     * Codeblocks that were rendered by this part into CodeBlockModelCollection.
     */
    codeblocks?: IChatCodeBlockInfo[];
    /**
     * Returns true if the other content is equivalent to what is already rendered in this content part.
     * Returns false if a rerender is needed.
     * followingContent is all the content that will be rendered after this content part (to support progress messages' behavior).
     */
    hasSameContent(other: IChatRendererContent, followingContent: IChatRendererContent[], element: ChatTreeItem): boolean;
    /**
     * Called when the content part is mounted to the DOM after being detached
     * due to virtualization.
     */
    onDidRemount?(): void;
    addDisposable?(disposable: IDisposable): void;
}
export interface IChatContentPartRenderContext {
    readonly element: IChatRequestViewModel | IChatResponseViewModel;
    readonly elementIndex: number;
    readonly container: HTMLElement;
    readonly content: ReadonlyArray<IChatRendererContent>;
    readonly contentIndex: number;
    readonly editorPool: EditorPool;
    readonly codeBlockStartIndex: number;
    readonly treeStartIndex: number;
    readonly diffEditorPool: DiffEditorPool;
    readonly codeBlockModelCollection: CodeBlockModelCollection;
    readonly currentWidth: IObservable<number>;
    readonly onDidChangeVisibility: Event<boolean>;
}
