import type { JSONDocNode, JSONNode } from '@atlaskit/editor-json-transformer';
import type { Fragment, MarkType, NodeType, Mark as PMMark, Node as PMNode, ResolvedPos, Schema } from '@atlaskit/editor-prosemirror/model';
import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
import type { CardAppearance } from '@atlaskit/smart-card';
/**
 * Finds all top level nodes affected by the transaction
 * Uses from/to positions in transaction's steps to work out which nodes will
 * be changed by the transaction
 */
export declare const findChangedNodesFromTransaction: (tr: Transaction) => PMNode[];
export declare const validNode: (node: PMNode) => boolean;
/** Validates prosemirror nodes, and returns true only if all nodes are valid */
export declare const validateNodes: (nodes: PMNode[]) => boolean;
type PMEntities = PMNode | PMMark | null | undefined;
export declare const isType: (node: PMEntities, type: NodeType | MarkType | undefined) => boolean | null | undefined;
export declare const isParagraph: (node: PMEntities, schema: Schema) => boolean | null | undefined;
export declare const isText: (node: PMEntities, schema: Schema) => boolean | null | undefined;
export declare const isLinkMark: (node: PMEntities, schema: Schema) => boolean | null | undefined;
export declare enum SelectedState {
    selectedInRange = 0,
    selectedInside = 1
}
/**
 * Returns if the current selection from achor-head is selecting the node.
 * If the node is not selected then null is returned.
 * If the node is selected then an enum is returned that describes weather the node
 * is fully selected by a range or if the "inside" of the node has been selected or clicked.
 */
export declare const isNodeSelectedOrInRange: (anchorPosition: number, headPosition: number, nodePosition: number | undefined, nodeSize: number) => SelectedState | null;
/**
 * Checks if a particular node fragment is supported in the parent
 * @param state EditorState
 * @param fragment The fragment to be checked for
 */
export declare const isSupportedInParent: (state: EditorState, fragment: Fragment, currentAppearance?: CardAppearance) => boolean;
/**
 * Checks if the passed in node is a media node
 * Includes media, mediaInline, mediaGroup, mediaSingle
 * @param node The PM node to be checked
 */
export declare const isMediaNode: (node: PMNode) => boolean;
/**
 * Checks if the node before selection is a media node
 * If there is no node before, checks the node before the parent node
 * Includes media, mediaInline, mediaGroup, mediaSingle
 * @param $pos The position of the selection
 * @param state The editor state
 */
export declare const isNodeBeforeMediaNode: ($pos: ResolvedPos, state: EditorState) => boolean;
export declare function toJSON(node: PMNode): JSONDocNode;
export declare function nodeToJSON(node: PMNode): JSONNode;
export {};
