import { Key, Keyed } from '@synnaxlabs/x';
import { ComponentPropsWithoutRef, ReactElement } from 'react';
import { Align } from '../align';
import { ItemRenderProp } from './types';
export interface VirtualCoreProps<K extends Key = Key, E extends Keyed<K> = Keyed<K>> extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
    itemHeight: number;
    children: ItemRenderProp<K, E>;
    overscan?: number;
}
declare const VirtualCore: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ itemHeight, children, overscan, className, ...props }: VirtualCoreProps<K, E>) => ReactElement;
export declare const Core: {
    <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ itemHeight, className, ...props }: Omit<Align.SpaceProps, "children"> & {
        children: ItemRenderProp<K, E>;
        itemHeight?: number;
    }): ReactElement;
    Virtual: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ itemHeight, children, overscan, className, ...props }: VirtualCoreProps<K, E>) => ReactElement;
};
export type CoreBaseType = typeof Core;
/**
 * Categorizes the core components for a list.
 *
 * @property Virtual - A virtualized renderer for a list.
 */
export interface CoreType extends CoreBaseType {
    /**
     * A virtualized list core.
     *
     * @param props - Props for the virtualized list core. All props not defined below
     * are passed to the underlying div element wrapping the list.
     * @param props.itemHeight - The height of each item in the list.
     * @param props.overscan - The number of extra items to render during virtualization.
     * This improves scroll performance, but also adds extra DOM elements, so make sure
     * to set this to a reasonable value.
     * @param props.children - A render props that renders each item in the list. It should
     * implement the {@link ItemProps} interface. The virtualizer will pass all props
     * satisfying this interface to the render props.
     */
    Virtual: typeof VirtualCore;
}
export {};
//# sourceMappingURL=Core.d.ts.map