import * as O from 'fp-ts/Option';
import * as TE from 'fp-ts/TaskEither';
import * as T from 'fp-ts/Tree';
import { MenuAction } from '../actionsMenu/ActionsMenu';
import { ActionReturn } from './TreeView';
declare type ForestFunctions = {
forest: T.Forest;
addChild: (makeChild: (fromNode: T.Tree) => TE.TaskEither>) => (key: K) => TE.TaskEither>;
addRoot: (newRoot: A) => void;
duplicate: (key: K) => (modify: (a: A) => TE.TaskEither) => TE.TaskEither>;
remove: (key: K) => void;
moveUp: (key: K) => O.Option>;
moveDown: (key: K) => O.Option>;
moveInto: (key: K) => O.Option>;
canMoveUp: (key: K) => boolean;
canMoveDown: (key: K) => boolean;
canMoveInto: (key: K) => boolean;
};
export declare const useForestFunctions: (forest: T.Forest, getKey: (a: A) => K) => ForestFunctions;
export declare const useTreeViewCreateChildAction: ({ addChild }: Pick, "addChild">, createNode: (fromNode: T.Tree) => TE.TaskEither>) => (key: K) => MenuAction>;
declare type MovementChecks = 'canMoveDown' | 'canMoveInto' | 'canMoveUp';
declare type MovementFuncNames = 'moveUp' | 'moveDown' | 'moveInto';
declare type MovementFuncs = {
[F in MovementFuncNames]: (key: K) => void;
};
export declare const useTreeViewMoveActions: (ffs: Pick, MovementChecks> & MovementFuncs) => (key: K) => MenuAction>[];
export declare const useTreeViewActions: (ffs: Pick, "addChild" | "canMoveUp" | "canMoveDown" | "canMoveInto"> & MovementFuncs, createNode: (fromNode: T.Tree) => TE.TaskEither>) => (key: K) => MenuAction>[];
export {};