import { default as React, RefObject } from 'react';
import { default as Color } from 'color';
import { VariableSizeTree } from 'react-vtree';
import { AccountReport, COABalance, FetchState, NestedClassID } from '@zeniai/client-epic-state';
import { CompareMode } from '../common/compareMode';
import { AccountBalanceClickMeta, ReportElementConfig, ReportTreeKind, ReportTreeNode, ReportTreeNodeData } from './reportTreeTypes';
export type ReportTreeInternalType = VariableSizeTree<ReportTreeNodeData>;
export interface ReportTreeScrollPosition {
    scrollTop: number;
    scrollLeft?: number;
}
export interface RootNodes {
    config: ReportElementConfig;
    contentNodes: ReportTreeNode[];
    headerNodes: ReportTreeNode[];
}
export interface Props {
    compareMode: Exclude<CompareMode, "off">;
    height: number;
    isSticky: {
        isStickyHeader: boolean;
        isStickyName: boolean;
    };
    kind: ReportTreeKind;
    nodeOpenStatus: Record<string, boolean>;
    rootNodes: RootNodes;
    backgroundColor?: Color;
    infiniteLoadingProps?: {
        itemCount: number;
        isItemLoaded: (index: number) => boolean;
        loadMoreItems: () => void;
    };
    scrollPosition?: ReportTreeScrollPosition;
    treeClassName?: string;
    treeNodePadding?: {
        left: number;
        right: number;
    };
    treeOuterElementRef?: RefObject<HTMLDivElement>;
    treeRef?: RefObject<ReportTreeInternalType>;
    treeStyle?: React.CSSProperties;
    variableNodeHeightTree?: {
        fetchState: FetchState;
        isSortApplied: boolean;
        prevFetchState: FetchState;
        prevRefreshFetchState: FetchState;
        refreshFetchState: FetchState;
        reducedFetchState?: FetchState;
        setIsSortApplied: (sortingChanged: boolean) => void;
    };
    onCompareModeChanged?: (newCompareMode: Exclude<CompareMode, "off">) => void;
    onNodeClick?: (treeNodeId: string, isOpen: boolean, account?: AccountReport, balance?: COABalance, balanceClickMeta?: AccountBalanceClickMeta) => void;
    onNodeCollapseToggled?: (nodeId: string, isOpen: boolean) => void;
    onScroll?: (props: ReportTreeScrollPosition) => void;
    onToggleCheck?: (nodeId: NestedClassID, isChecked: boolean) => void;
    onTreeInnerElementHeightChanged?: (treeInnerElementHeight: number) => void;
}
interface StickyInnerElementContextType {
    backgroundColor: Color | undefined;
    compareMode: Exclude<CompareMode, "off">;
    isSticky: {
        isStickyHeader: boolean;
        isStickyName: boolean;
    };
    kind: ReportTreeKind;
    rootNodes: RootNodes;
    treeNodePadding: {
        left: number;
        right: number;
    } | undefined;
    onCompareModeChanged?: (newCompareMode: Exclude<CompareMode, "off">) => void;
}
export declare const StickyInnerElementContext: React.Context<StickyInnerElementContextType | undefined>;
export declare function ReportTree({ height, kind, rootNodes, compareMode, isSticky, backgroundColor, treeNodePadding, treeClassName, treeStyle, treeRef, treeOuterElementRef, infiniteLoadingProps, variableNodeHeightTree, onNodeClick, onCompareModeChanged, scrollPosition, onScroll, nodeOpenStatus: latestNodeOpenStatus, onNodeCollapseToggled, onTreeInnerElementHeightChanged, onToggleCheck, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
export {};
