import { BaseCollection, CollectionNode } from './BaseCollection';
import { CachedChildrenOptions } from './useCachedChildren';
import { Key, Node } from '@react-types/shared';
import React, { ForwardedRef, JSX, ReactElement, ReactNode } from 'react';
export interface CollectionBuilderProps<C extends BaseCollection<object>> {
    content: ReactNode;
    children: (collection: C) => ReactNode;
    createCollection?: () => C;
}
/**
 * Builds a `Collection` from the children provided to the `content` prop, and passes it to the child render prop function.
 */
export declare function CollectionBuilder<C extends BaseCollection<object>>(props: CollectionBuilderProps<C>): ReactElement;
export type CollectionNodeClass<T> = {
    new (key: Key): CollectionNode<T>;
    readonly type: string;
};
export declare function createLeafComponent<T extends object, P extends object, E extends Element>(CollectionNodeClass: CollectionNodeClass<any> | string, render: (props: P, ref: ForwardedRef<E>) => ReactElement | null): (props: P & React.RefAttributes<E>) => ReactElement | null;
export declare function createLeafComponent<T extends object, P extends object, E extends Element>(CollectionNodeClass: CollectionNodeClass<any> | string, render: (props: P, ref: ForwardedRef<E>, node: Node<T>) => ReactElement | null): (props: P & React.RefAttributes<E>) => ReactElement | null;
export declare function createBranchComponent<T extends object, P extends {
    children?: any;
}, E extends Element>(CollectionNodeClass: CollectionNodeClass<any> | string, render: (props: P, ref: ForwardedRef<E>, node: Node<T>) => ReactElement | null, useChildren?: (props: P) => ReactNode): (props: P & React.RefAttributes<E>) => ReactElement | null;
export interface CollectionProps<T> extends CachedChildrenOptions<T> {
}
/** A Collection renders a list of items, automatically managing caching and keys. */
export declare function Collection<T extends object>(props: CollectionProps<T>): JSX.Element;
