import type { Ref, ComponentType, ReactNode } from 'react';
import type { BaseProps, NoChildrenProp, ForwardProps, OmitStrict, TestIdProp } from '../../types';
export type TreeNode = {
    /** The id of the Node. Used as the key for the li element wrapping the Node. */
    id: string;
    /** Child nodes. */
    nodes?: TreeNode[];
    /** Props to apply to the li. */
    listItemProps?: ForwardProps;
    [key: string]: unknown;
};
export interface TreeProps<T extends TreeNode = TreeNode> extends BaseProps, NoChildrenProp, TestIdProp {
    /** An array of ParentNodes and Nodes that compose the layout of the Tree. */
    nodes: T[];
    /** A function that allows custom styling and behavior for all Nodes. */
    nodeRenderer?: ComponentType<{
        depth: number;
        subTree?: ReactNode;
        hasParentSibling: TreeItemProps['hasParentSibling'];
    } & OmitStrict<T, 'listItemProps'>>;
    /** Ref for the wrapping element. */
    ref?: Ref<HTMLUListElement>;
}
export declare const StyledTreeListItem: import("styled-components").StyledComponent<"li", import("styled-components").DefaultTheme, {}, never>;
export declare const StyledTreeList: import("styled-components").StyledComponent<"ul", import("styled-components").DefaultTheme, {}, never>;
interface TreeItemProps extends TreeNode {
    nodeRenderer: NonNullable<TreeProps['nodeRenderer']>;
    depth: number;
    hasParentSibling: boolean;
}
declare const _default: (<T extends TreeNode = TreeNode>(props: TreeProps<T> & ForwardProps) => JSX.Element | null) & {
    getTestIds: (testIdProp?: string | null | undefined) => import("../../types").TestIdsRecord<readonly []>;
};
export default _default;
//# sourceMappingURL=Tree.d.ts.map