/** @packageDocumentation
 * @module Tree
 */
import "../../common/DisposePolyfill.js";
import { AbstractTreeNodeLoaderWithProvider, HighlightableTreeProps, RenderedItemsRange, TreeEventHandler, TreeModel, TreeModelSource } from "@itwin/components-react";
import { PresentationTreeDataProviderProps } from "../DataProvider.js";
import { IFilteredPresentationTreeDataProvider, IPresentationTreeDataProvider } from "../IPresentationTreeDataProvider.js";
/**
 * Properties for [[usePresentationTreeState]] hook.
 * @public
 * @deprecated in 5.7. All tree-related APIs have been deprecated in favor of the new generation hierarchy
 * building APIs (see https://github.com/iTwin/presentation/blob/33e79ee8d77f30580a9bab81a72884bda008db25/README.md#the-packages).
 */
export interface UsePresentationTreeStateProps<TEventHandler extends TreeEventHandler = TreeEventHandler> extends PresentationTreeDataProviderProps {
    /**
     * Number of nodes in a single page. The created loader always requests at least
     * a page of nodes, so it should be optimized for usability vs performance (using
     * smaller pages gives better responsiveness, but makes overall performance
     * slightly worse).
     *
     * Note: The prop is already defined in `PresentationTreeDataProviderProps` but specified here again to make it required.
     */
    pagingSize: number;
    /**
     * Initialize tree data with the provided tree model.
     */
    seedTreeModel?: TreeModel;
    /**
     * Factory function for creating custom tree events handler. Defaults to creating [TreeEventHandler]($components-react).
     *
     * Note: Must be memoized.
     */
    eventHandlerFactory?: (props: PresentationTreeEventHandlerProps) => TEventHandler | undefined;
    /**
     * Parameters for filtering tree.
     */
    filteringParams?: {
        /** Filter text. */
        filter: string;
        /** Current active filter match. It is used to create [HighlightableTreeNodeProps]($components-react) for highlighting and stepping through filter matches. */
        activeMatchIndex?: number;
    };
    /**
     * Callback for when a tree node is loaded.
     */
    onNodeLoaded?: (props: {
        /** ID of the loaded node, `root` if it is the root. */
        node: string;
        /** Duration how long the load took in milliseconds. */
        duration: number;
    }) => void;
    /**
     * Callback for when the hierarchy limit is exceeded while loading nodes.
     */
    onHierarchyLimitExceeded?: () => void;
}
/**
 * Return type of [[usePresentationTreeState]] hook.
 * @public
 * @deprecated in 5.7. All tree-related APIs have been deprecated in favor of the new generation hierarchy
 * building APIs (see https://github.com/iTwin/presentation/blob/33e79ee8d77f30580a9bab81a72884bda008db25/README.md#the-packages).
 */
export interface UsePresentationTreeStateResult<TEventHandler extends TreeEventHandler = TreeEventHandler> {
    /** Tree node loader to be used with a tree component. */
    nodeLoader: AbstractTreeNodeLoaderWithProvider<IPresentationTreeDataProvider>;
    /** Event handler to be used with a tree component. */
    eventHandler: TEventHandler;
    /**
     * Callback for when rendered tree node item range changes. This property should be passed to
     * [ControlledTree]($components-react).
     */
    onItemsRendered: (items: RenderedItemsRange) => void;
    /**
     * Information about filtering applied on tree.
     */
    filteringResult?: {
        /** Specifies whether filtering is in progress or not. */
        isFiltering: boolean;
        /** Filtered data provider used when loading nodes. */
        filteredProvider?: IFilteredPresentationTreeDataProvider;
        /** Props for highlighting filter matches in node label. */
        highlightProps?: HighlightableTreeProps;
        /** Total count of filter matches. */
        matchesCount?: number;
    };
}
/**
 * Props passed to [[UsePresentationTreeStateProps.eventHandlerFactory]] when creating event handler.
 * @public
 * @deprecated in 5.7. All tree-related APIs have been deprecated in favor of the new generation hierarchy
 * building APIs (see https://github.com/iTwin/presentation/blob/33e79ee8d77f30580a9bab81a72884bda008db25/README.md#the-packages).
 */
export interface PresentationTreeEventHandlerProps {
    /** Node loader used to load nodes. */
    nodeLoader: AbstractTreeNodeLoaderWithProvider<IPresentationTreeDataProvider>;
    /** Model source containing tree model. */
    modelSource: TreeModelSource;
}
/**
 * Custom hook that creates and manages state for [ControlledTree]($components-react) component based on presentation data.
 * @public
 * @deprecated in 5.7. All tree-related APIs have been deprecated in favor of the new generation hierarchy
 * building APIs (see https://github.com/iTwin/presentation/blob/33e79ee8d77f30580a9bab81a72884bda008db25/README.md#the-packages).
 */
export declare function usePresentationTreeState<TEventHandler extends TreeEventHandler = TreeEventHandler>({ onHierarchyLimitExceeded, onNodeLoaded, eventHandlerFactory, seedTreeModel, filteringParams, ...dataProviderProps }: UsePresentationTreeStateProps<TEventHandler>): UsePresentationTreeStateResult<TEventHandler> | undefined;
//# sourceMappingURL=UsePresentationTreeState.d.ts.map