import { CreateSelectorFunction } from 'reselect';
import { TreeViewAnyPluginSignature, TreeViewState } from "../models/index.js";
/**
 * Type of a selector that take the whole tree view state as input and returns a value based on a required plugin.
 */
export type TreeViewRootSelector<TSignature extends TreeViewAnyPluginSignature, TIsOptional extends boolean = false> = <TSignatures extends (TIsOptional extends true ? [] : [TSignature]), TOptionalSignatures extends (TIsOptional extends true ? [TSignature] : [])>(state: TreeViewState<TSignatures, TOptionalSignatures>) => TIsOptional extends true ? TSignature['state'][keyof TSignature['state']] | undefined : TSignature['state'][keyof TSignature['state']];
/**
 * Type of a selector that take the whole tree view state as input and returns a value based on an optional plugin.
 */
export type TreeViewRootSelectorForOptionalPlugin<TSignature extends TreeViewAnyPluginSignature> = <TSignatures extends [], TOptionalSignatures extends [TSignature]>(state: TreeViewState<TSignatures, TOptionalSignatures>) => TSignature['state'][keyof TSignature['state']] | undefined;
export type TreeViewSelector<TState, TArgs, TResult> = (state: TState, args: TArgs) => TResult;
/**
 * Method wrapping reselect's createSelector to provide caching for tree view instances.
 *
 */
export declare const createSelector: CreateSelectorFunction;