import { default as React } from 'react';
import { SortDirectionType } from '../../SortUtils';
export type Group = {
    groupKey: string;
    items: any[];
};
export type GroupedItemListProps<T> = {
    /**
     * The list of items to be grouped and rendered.
     *
     * By default, the component assumes an item object containing an `id` and `name` property
     * plus some other attributes.
     */
    items: T[];
    /**
     * The property of the items to group by as a string, or a custom group function.
     * Defaults to `name` if not provided.
     *
     * @default 'name'
     */
    groupBy?: keyof T | ((item: T) => string);
    /**
     * The order in which to sort the groups. Accepts `asc` for ascending or `desc` for descending.
     * @default 'asc'
     */
    groupSortOrder?: SortDirectionType;
    /**
     * The order in which to sort the items inside a group. Accepts `asc` for ascending or `desc` for descending.
     *
     * @default 'asc'
     */
    itemSortOrder?: SortDirectionType;
    /**
     * Sorting function for the groups.
     */
    groupSortFunction?: (groups: Group[]) => Group[];
    /**
     * Sorting function for the items within each group.
     */
    itemSortFunction?: (items: T[]) => T[];
    /**
     * A custom render function for the group divider.
     * Receives the group key (e.g., letter or date) as a parameter.
     */
    renderDivider?: (groupKey: string) => React.ReactNode;
    /**
     * A custom render function for individual list items.
     * Receives an item as a parameter.
     */
    renderItem?: (item: T) => React.ReactNode;
    /**
     * Specifies the HTML element to use for the list inside each group.
     * Default is `div`. Use `ul` for rendering the list items as `<li>` elements.
     *
     * @default 'div'
     */
    listElement?: 'div' | 'ul';
    /**
     * Optional class name for the list element inside each group.
     * Applied to the `div` or `ul` wrapping the items.
     */
    listElementClassName?: string;
    /**
     * Optional class name for the divider element in each group.
     * Applied to the `div` wrapping each group divider.
     */
    dividerElementClassName?: string;
    /**
     * Optional class name for the outer wrapper element.
     * Applied to the outer `div` wrapping the entire component.
     */
    className?: string;
};
/**
 * A React component that groups and renders a list of items based on a specified property.
 * The component can be customized to render dividers and list items in different styles.
 *
 * @param {GroupedItemListProps} props - The props for the component.
 * @returns {JSX.Element} The grouped and rendered list component.
 */
declare const GroupedItemList: <T>(props: GroupedItemListProps<T>) => import("react/jsx-runtime").JSX.Element;
export default GroupedItemList;
