import { BlockNoteEditor, PartialBlock } from "@blocknote/core";
import { AddBlocksToolCall } from "../../api/formats/base-tools/createAddBlocksTool.js";
import { UpdateBlockToolCall } from "../../api/formats/base-tools/createUpdateBlockTool.js";
import { DeleteBlockToolCall } from "../../api/formats/base-tools/delete.js";
export type DocumentOperationTestCase = {
    /**
     * The editor to apply the update to
     */
    editor: () => BlockNoteEditor<any, any, any>;
    /**
     * The toolcalls to apply to the editor
     */
    baseToolCalls: Array<UpdateBlockToolCall<PartialBlock<any, any, any>> | AddBlocksToolCall<PartialBlock<any, any, any>> | DeleteBlockToolCall>;
    /**
     * If provided, this function will be used to get the selection to use for the test.
     */
    getTestSelection?: (editor: BlockNoteEditor<any, any, any>) => {
        from: number;
        to: number;
    };
    /**
     * Description (name) of the test case
     */
    description: string;
    /**
     * For LLM tests, this is a prompt that can be given that should also result in the same update.
     *
     * Note: the test cases in this file focus on formatting, so the prompts might not be very realistic,
     * the goal of these tests is to test whether LLMs can make certain updates technically, not to test
     * the quality of the prompt understanding, etc. (should be in different tests)
     */
    userPrompt: string;
    /**
     * The capabilities that are required to perform the update.
     * If the LLM does not have these capabilities, the test will be skipped.
     */
    requiredCapabilities?: {
        mentions?: boolean;
        textAlignment?: boolean;
        blockColor?: boolean;
    };
};
export declare function getExpectedEditor(testCase: DocumentOperationTestCase, opts?: {
    deleteEmptyCursorBlock: boolean;
}): BlockNoteEditor<any, any, any>;
