import type { FocusEventHandler, KeyboardEventHandler, MouseEventHandler, Ref } from "react";
import type { KeyboardMovementProviderImplementation } from "../movement/types.js";
import type { NonNullMutableRef } from "../types.js";
import type { TreeItemMetadataLookup } from "./TreeProvider.js";
import type { TreeData, TreeItemNode } from "./types.js";
import type { TreeExpansion } from "./useTreeExpansion.js";
import type { TreeItemChildIds } from "./useTreeItems.js";
/**
 * @since 6.0.0
 * @internal
 */
interface TreeMovementOptions<T extends TreeItemNode> extends TreeExpansion {
    ref?: Ref<HTMLUListElement>;
    data: TreeData<T>;
    onClick: MouseEventHandler<HTMLUListElement> | undefined;
    onFocus: FocusEventHandler<HTMLUListElement> | undefined;
    onKeyDown: KeyboardEventHandler<HTMLUListElement> | undefined;
    selectedIds: ReadonlySet<string>;
    treeItemChildIds: TreeItemChildIds;
}
/**
 * @since 6.0.0
 * @internal
 */
interface TreeMovement extends KeyboardMovementProviderImplementation<HTMLUListElement> {
    /**
     * This will be mutated by the `TreeItem` component and used to handle
     * keyboard movement.
     */
    metadataLookup: NonNullMutableRef<TreeItemMetadataLookup>;
}
/**
 * @since 6.0.0
 * @internal
 */
export declare function useTreeMovement<T extends TreeItemNode>(options: TreeMovementOptions<T>): TreeMovement;
export {};
