import { default as React } from 'react';
export { getTypeCounts, getSubTypeCounts } from './treeUtils';
export type TreeItemName = {
    firstName?: string;
    lastName: string;
};
export type TreeGroup = {
    /**
     * A unique identifier of a group.
     */
    id: string;
    /**
     * The name of a group.
     */
    name: string | React.ReactNode;
    /**
     * Can be set to "last" to enforce the last position in the tree.
     */
    position?: 'last';
    /**
     * Disallows the selection of the group itself.
     */
    disabled?: boolean;
    /**
     * The rioglyph icon name for a group.
     *
     * The prefix `rioglyph-` can be omitted.
     *
     * For custom icons and logos, provide an image URL with one of these extensions:
     * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
     * In this case, an img tag is rendered instead of the rioglyph.
     */
    icon?: string;
    /**
     * The rioglyph icon name for a expanded group.
     *
     * The prefix `rioglyph-` can be omitted.
     *
     * For custom icons and logos, provide an image URL with one of these extensions:
     * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
     * In this case, an img tag is rendered instead of the rioglyph.
     */
    expandedIcon?: string;
    /**
     * Additional classes added to the group element.
     */
    className?: string;
};
export type TreeItem = {
    /**
     * A unique identifier of an item.
     */
    id: string;
    /**
     * The name of an item. Either it is a plain string or an object composed of:
     * `firstName` and `lastName` where __lastName__ is mandatory.
     */
    name: string | TreeItemName;
    /**
     * The subline of an item. This can e used to show additional information for that item.
     */
    info?: string | React.ReactNode;
    /**
     * The primary type of the item.
     *
     * This is also used as the fallback icon name and refers to the name of the respective
     * rioglyph icon (excluding the `rioglyph-` prefix).
     */
    type: string;
    /**
     * Optional icon override for the item.
     *
     * - If set to a string (e.g. `'truck'`), this icon will be used explicitly.
     * - If set to `undefined`, the `type` property will be used as the fallback icon.
     * - If set to `null`, no icon will be rendered, even if `type` is defined.
     *
     * This allows full control over the icon behavior while maintaining backward compatibility with type-based icons.
     *
     * For custom icons and logos, provide an image URL with one of these extensions:
     * `.png`, `.webp`, `.jpg`, `.jpeg`, `.svg`.
     * In this case, an img tag is rendered instead of the rioglyph.
     */
    icon?: string | null;
    /**
     * Optional sub-type of the item.
     *
     * This refers to the name of an additional rioglyph icon (excluding the `rioglyph-` prefix),
     * typically used to render a secondary icon next to the primary one (Note: for fuel types better use the pairIcon prop).
     */
    subType?: string;
    /**
     * Optional pair icon override for the subType.
     *
     * - If set to a string (e.g. `'fuel-gas'`), this icon will be used explicitly.
     * - If set to `undefined`, the `subType` property will be used as the fallback icon.
     * - If set to `null`, no icon will be rendered, even if `subType` is defined.
     *
     * This allows full control over the icon behavior while maintaining backward compatibility with subType-based icons.
     */
    pairIcon?: string | null | undefined;
    /**
     * List of group ids the items is associated with.
     *
     * @default []
     */
    groupIds?: string[];
    /**
     * Additional classes added to the item element.
     */
    className?: string;
};
export type GroupedItem = TreeGroup & {
    items: TreeItem[];
};
export type GroupedItems = {
    [key: string]: GroupedItem;
};
export type SelectionChangeResponse = {
    items: string[];
    groups: string[];
};
export type TreeProps = {
    /**
     * The list of groups of the items. If no groups are provided all items
     * are rendered as flat list.
     *
     * @default []
     */
    groups?: TreeGroup[];
    /**
     * The list of items.
     *
     * @default []
     */
    items?: TreeItem[];
    /**
     * List of selected group ids.
     *
     * @default []
     */
    selectedGroups?: string[];
    /**
     * List of selected item ids.
     *
     * @default []
     */
    selectedItems?: string[];
    /**
     * Merged Callback for item and group selection changes.
     * It responds with a selection object that contains the selected itemIds and groupIds:
     * `{ items: [], groups: [] }`
     * @returns
     */
    onSelectionChange?: ({ items, groups }: SelectionChangeResponse) => void;
    /**
     * Defines the selection behavior of the tree.
     *
     * @default true
     */
    hasMultiselect?: boolean;
    /**
     * Defines if the single selection should also show radios.
     *
     * @default false
     */
    showRadioButtons?: boolean;
    /**
     * Defines whether or not the built-in Search is shown.
     *
     * @default false
     */
    hideSearch?: boolean;
    /**
     * The text used as placeholder for the search input.
     */
    searchPlaceholder?: string;
    /**
     * Callback for when the search value changes.
     * @param value
     * @returns
     */
    onSearchChange?: (value: string) => void;
    /**
     * Used to define custom search component which replaces the built-in search.
     */
    search?: React.ReactNode;
    /**
     * Used to define custom asset type counter component which replaces the built-in summary.
     */
    summary?: React.ReactNode;
    /**
     * Defines whether a summary is shown.
     *
     * @default false
     */
    hideSummary?: boolean;
    /**
     * Callback triggered when the built-in asset type filter changes.
     * This is only available when the default summary is used.
     *
     * @param type
     * @returns
     */
    onTypeFilterChange?: (currentTypes: string[]) => void;
    /**
     * Defines whether the entire area below the search field is shown or not. Note: Disabling the
     * tree head will hide the select all checkbox and the tree options as well as the tree summary.
     *
     * @default false
     */
    hideTreeHead?: boolean;
    /**
     * Additional custom content that is rendered at the top of the tree component. This can be used for nav pills.
     */
    treeHeaderContent?: React.ReactElement;
    /**
     * Defines the max-height of the scrollable list.
     */
    scrollHeight?: number;
    /**
     * List of group ids which are expanded.
     */
    expandedGroups?: string[];
    /**
     * Callback function triggered when a group expands or collapses.
     * @param newExpandedGroups
     * @returns
     */
    onExpandGroupsChange?: (newExpandedGroups: string[]) => void;
    /**
     * Defines whether empty groups are shown or not.
     *
     * @default true
     */
    showEmptyGroups?: boolean;
    /**
     * Component to offer customization options for the tree.
     */
    treeOptions?: React.ReactNode[];
    /**
     * Tooltip content for the tree options dropdown.
     */
    treeOptionsTooltip?: React.ReactNode;
    /**
     * Disables animation when filtering or using search
     *
     * @default false
     */
    disableAnimation?: boolean;
    /**
     * The number of items (including groups and children) used for virtualizing the tree.
     *
     * @default 50
     */
    virtualizeThreshold?: number;
    /**
     * The number of items rendered beyond the visible area of a virtualized tree.
     *
     * @default 5
     */
    overscan?: number;
    /**
     * Additional classes added to the wrapping element.
     */
    className?: string;
};
declare const Tree: React.MemoExoticComponent<(props: TreeProps) => import("react/jsx-runtime").JSX.Element>;
export default Tree;
