import { NodeRange } from '@atlaskit/editor-prosemirror/model';
import type { Node, NodeType, ResolvedPos } from '@atlaskit/editor-prosemirror/model';
import type { EditorState, Selection, Transaction } from '@atlaskit/editor-prosemirror/state';
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
import type { TaskItemData } from './types';
export declare const isInsideTaskOrDecisionItem: (state: EditorState) => boolean;
export declare const isActionOrDecisionList: (node: Node) => boolean;
export declare const isActionOrDecisionItem: (node: Node) => boolean;
export declare const isInsideTask: (state: EditorState) => boolean;
export declare const isInsideDecision: (state: EditorState) => boolean;
export declare const isTable: (node?: Node | null) => boolean;
/**
 * Creates a NodeRange around the given taskItem and the following
 * ("nested") taskList, if one exists.
 */
export declare const getBlockRange: ({ $from, $to, }: {
    $from: ResolvedPos;
    $to: ResolvedPos;
}) => NodeRange | null;
/**
 * Calculates the current indent level of the selection within a task list in the ProseMirror document.
 *
 * The indent level is determined by finding the depth difference between the selection and the furthest parent
 * node of type `taskList`. If the selection is inside a `blockTaskItem`, the calculation is adjusted to avoid
 * counting nested block items as additional indent levels.
 *
 * @param selection - The current ProseMirror selection.
 * @returns The indent level as a number, or `null` if the selection is not inside a task list.
 * @example
 * ```typescript
 * const indentLevel = getCurrentIndentLevel(editorState.selection);
 * ```
 */
export declare const getCurrentIndentLevel: (selection: Selection) => number | null;
/**
 * Finds the index of the current task item in relation to the closest taskList
 */
export declare const getTaskItemIndex: (state: EditorState) => number;
/**
 * Walk outwards from a position until we encounter the (inside) start of
 * the next node, or reach the end of the document.
 *
 * @param $startPos Position to start walking from.
 */
export declare const walkOut: ($startPos: ResolvedPos) => ResolvedPos;
/**
 * Finds the height of a tree-like structure, given any position inside it.
 *
 * Traverses from the top of the tree to all leaf nodes, and returns the length
 * of the longest path.
 *
 * This means you can use it with things like taskList, which
 * do not nest themselves inside taskItems but rather as adjacent children.
 *
 * @param $pos Any position inside the tree.
 * @param types The node types to consider traversable
 */
export declare const subtreeHeight: ($from: ResolvedPos, $to: ResolvedPos, types: NodeType[]) => number;
/**
 * Determines if the current selection is inside an empty taskItem, decisionItem, or blockTaskItem.
 *
 * @param state - The current EditorState.
 * @returns `true` if the taskItem, decisionItem, or blockTaskItem is empty; otherwise, `false`.
 */
export declare const isEmptyTaskDecision: (state: EditorState) => boolean;
/**
 * Lifts a taskItem and any directly following taskList
 * (taskItem and its "nested children") out one level.
 *
 * @param tr Transaction to base steps on
 * @param $from Start of range you want to lift
 * @param $to End of range you want to lift (can be same as `$from`)
 */
export declare const liftBlock: (tr: Transaction, $from: ResolvedPos, $to: ResolvedPos) => Transaction | null;
export declare function getTaskItemDataAtPos(view: EditorView): {
    localId: any;
    pos: number;
} | undefined;
export declare function getAllTaskItemsDataInRootTaskList(view: EditorView): {
    index: number;
    node: Node;
    pos: number;
}[] | undefined;
export declare function getCurrentTaskItemIndex(view: EditorView, allTaskItems: Array<{
    index: number;
    node: Node;
    pos: number;
}>): number;
export declare function getTaskItemDataToFocus(view: EditorView, direction: 'next' | 'previous'): {
    localId: any;
    pos: number;
} | undefined;
export declare function focusCheckbox(view: EditorView, taskItemData?: TaskItemData): void;
export declare function focusCheckboxAndUpdateSelection(view: EditorView, taskItemData: TaskItemData): void;
export declare function removeCheckboxFocus(view: EditorView): void;
export declare function openRequestEditPopupAt(view: EditorView, pos: number): void;
export declare function closeRequestEditPopupAt(view: EditorView): void;
export declare function findFirstParentListNode($pos: ResolvedPos): {
    node: Node;
    pos: number;
} | null;
export declare const isInFirstTextblockOfBlockTaskItem: (state: EditorState) => boolean;
export declare const isInLastTextblockOfBlockTaskItem: (state: EditorState) => boolean;
