/// <reference types="react" />
import { MultiCascaderProps, ValueType } from './MultiCascader';
import { ItemDataType } from '../@types/common';
export interface ItemType extends ItemDataType {
    parent?: ItemType;
}
interface ItemKeys {
    valueKey: string;
    labelKey: string;
    childrenKey: string;
}
declare type MayHasParent<T extends Record<string, unknown>> = T & {
    parent?: MayHasParent<T>;
};
/**
 * Get all parents of a node
 * @param node
 */
export declare const getParents: <T extends Record<string, unknown>>(node: MayHasParent<T>) => MayHasParent<T>[];
/**
 * Check if any child nodes are selected.
 * @param node
 * @param value
 * @param itemKeys
 */
export declare const isSomeChildChecked: <T extends Record<string, unknown>>(node: T, value: ValueType, itemKeys: Omit<ItemKeys, 'labelKey'>) => any;
/**
 * Check if the parent is selected.
 * @param node
 * @param value
 * @param itemKeys
 */
export declare const isSomeParentChecked: <T extends Record<string, unknown>>(node: MayHasParent<T>, value: ValueType, itemKeys: Pick<ItemKeys, 'valueKey'>) => any;
export declare const getOtherItemValuesByUnselectChild: <T>(itemNode: ItemType, value: any, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[];
/**
 * Remove the values of all children.
 */
export declare const removeAllChildrenValue: <T>(value: T[], item: ItemType, itemKeys: Omit<ItemKeys, 'labelKey'>) => T[] | undefined;
/**
 * A hook to flatten tree structure data
 * @param data
 */
export declare function useFlattenData<T>(data: T[], itemKeys: ItemKeys): {
    addFlattenData: (children: T[], parent: T) => void;
    flattenData: T[];
};
/**
 * A hook for column data
 * @param flattenData
 */
export declare function useColumnData<T extends MayHasParent<Record<string, unknown>>>(flattenData: T[]): {
    columnData: T[][];
    addColumn: (column: T[], index: number) => void;
    romoveColumnByIndex: (index: number) => void;
    setColumnData: import("react").Dispatch<import("react").SetStateAction<T[][]>>;
    enforceUpdateColumnData: (nextData: T[]) => void;
};
/**
 * A hook that converts the value into a cascading value
 * @param props
 * @param flattenData
 */
export declare function useCascadeValue<T>(props: Partial<MultiCascaderProps<T[]>> & ItemKeys, flattenData: ItemType[]): {
    value: T[];
    setValue: import("react").Dispatch<import("react").SetStateAction<T[]>>;
    splitValue: (item: ItemType, checked: boolean, value: T[]) => {
        value: T[];
        removedValue: T[];
    };
};
export {};
