import React from 'react';
import { NavigationProps } from '../Menu';
import { GroupItem, MultiSelectProps } from '../MultiSelect';
export declare type ChangeEvent = React.ChangeEvent<HTMLInputElement>;
export declare type Option = any;
export declare type GroupOption = any;
export declare type PickedMultiSelectProps = Omit<MultiSelectProps, 'value' | 'options' | 'getId' | 'getLabel' | 'onChange' | 'optionRenderer' | 'getGroup' | 'groupHeaderRenderer'>;
export interface GroupSelectProps extends PickedMultiSelectProps {
    /**
     * @since 10.19.0
     */
    value?: Option[];
    /**
     * Array of available options
     * `{ id: number label: string groupId?: string | number }`
     * `arrayOf: [object]`
     * @since 10.19.0
     */
    options?: Option[];
    /**
     * Array of available collections, field options contain option id's
     * `{ id: number label: string options: Option[] groupId?: string | number }`
     * `arrayOf: [object]`
     * @since 10.19.0
     */
    groups?: GroupOption[];
    /**
     * Callback with options selected when selecting or removing an option
     * `(value: T[]) => void`
     * @since 10.19.0
     */
    onChange?: (value: Option[], event?: Event) => void;
    /**
     * @since 10.19.0
     */
    getId?: (option: Option | GroupOption) => number | string;
    /**
     * Callback for each entry in options to generate the token label, also used for default searching.
     * `(option: T) => string`
     * @since 10.19.0
     */
    getLabel?: (option: Option | GroupOption) => string;
    /**
     * Callback for each entry in groups for keying and optimizations
     * `(option: T) => Option[]`
     * @since 10.19.0
     */
    getGroup?: (option: Option | GroupOption) => Option[];
    /**
     * Callback for each entry in groups and options to define relation in optgroups
     * `(option: OptionItem) => number | string`
     * @since 10.19.0
     */
    getOptGroup?: (option: Option | GroupOption) => number | string;
    /**
     * @since 10.19.0
     */
    onSearch?: (e: ChangeEvent) => void;
    /**
     * Callback for rendering each option
     * `(option: T, props: OptionRendererProps) => React.ReactNode`
     * @since 10.19.0
     */
    optionRenderer?: (option: Option, props: OptionRendererProps) => React.ReactNode;
    /**
     * Callback for rendering each group option
     * `(groupOption: T, props: OptionRendererProps) => React.ReactNode`
     * @since 10.19.0
     */
    groupRenderer?: (option: GroupOption, props: OptionRendererProps) => React.ReactNode;
    /**
     * Callback for rendering header for each entry in `optgroups`
     * `(group: GroupItem) => React.ReactNode`
     * @since 10.19.0
     */
    optGroupRenderer?: (option: GroupItem) => React.ReactNode;
}
export interface OptionRendererProps extends NavigationProps, Required<Pick<GroupSelectProps, 'getId' | 'getLabel'>> {
    /**
     * @since 10.19.0
     */
    value: Option;
    /**
     * @since 10.19.0
     */
    selected?: boolean;
    /**
     * @since 10.19.0
     */
    disabled?: boolean;
}
export interface GroupSelectConfig {
    /**
     * @since 10.19.0
     */
    value: Option[];
    /**
     * @since 10.19.0
     */
    options: Option[];
    /**
     * @since 10.19.0
     */
    groups: GroupOption[];
    /**
     * @since 10.19.0
     */
    getId: (option: Option | GroupOption) => number | string;
    /**
     * @since 10.19.0
     */
    getLabel: (option: Option | GroupOption) => string;
    /**
     * @since 10.19.0
     */
    getGroup: (option: Option | GroupOption) => Option[];
    /**
     * @since 10.19.0
     */
    onChange: (value: Option[]) => void;
    /**
     * @since 10.19.0
     */
    onSearch?: (e: ChangeEvent) => void;
}
