import { PillColor } from '../Pill/Pill.types';
import { OptionProps, SelectProps } from '../Select';
declare type Id = string | number;
export interface PillOption {
    /**
     * @since 10.19.0
     */
    color: PillColor;
    /**
     * @since 10.19.0
     */
    groupId?: Id;
    /**
     * @since 10.19.0
     */
    id: Id;
    /**
     * @since 10.19.0
     */
    label: string;
    /**
     * @since 10.19.0
     */
    suggested?: OptionProps['suggested'];
}
export interface PillOptionProps extends OptionProps {
    /**
     * @since 10.19.0
     */
    color: PillOption['color'];
    /**
     * @since 10.19.0
     */
    label: PillOption['label'];
}
export interface PillOptGroup {
    /**
     * @since 10.19.0
     */
    id: Id;
    /**
     * @since 10.19.0
     */
    label: string;
}
export interface PillSelectProps<Option = PillOption, OptionGroup = PillOptGroup> extends Omit<SelectProps, 'label'> {
    /**
     * A function returning the display color of an option's `Pill`
     * `(option: unknown) => PillColor`
     * @defaultValue `(option) => (option as PillOption).color`
     * @since 10.19.0
     */
    getColor?: (option: Option) => PillOption['color'];
    /**
     * A function returning group ID for a given option to define a relation to `optgroups`
     * `(option: unknown) => string | number`
     * @defaultValue `(option) => (option as PillOption).groupId`
     * @since 10.19.0
     */
    getGroup?: (option: Option) => PillOption['groupId'];
    /**
     * A function returning ID of a given option
     * `(option: unknown) => string | number`
     * @defaultValue `(option) => (option as PillOption).id`
     * @since 10.19.0
     */
    getId?: (option: Option) => PillOption['id'];
    /**
     * A function returning label of an option
     * `(option: unknown) => string`
     * @defaultValue `(option) => (option as PillOption).label`
     * @since 10.19.0
     */
    getLabel?: (option: Option) => PillOption['label'];
    /**
     * A function returning `boolean` value to suggest this option if nothing is selected.
     * `(option: unknown) => boolean`
     * @defaultValue `(option) => (option as PillOption).suggested`
     * @since 10.19.0
     */
    getSuggested?: (option: Option) => PillOption['suggested'];
    /**
     * A function returning the ID of a group
     * `(group: unknown) => string | number`
     * @defaultValue `(group) => (group as PillOptgroup).id`
     * @since 10.19.0
     */
    groupGetId?: (group: OptionGroup) => PillOptGroup['id'];
    /**
     * A function returning label of a group
     * `(group: unknown) => string`
     * @defaultValue `(group) => (group as PillOptgroup).label`
     * @since 10.19.0
     */
    groupGetLabel?: (group: OptionGroup) => PillOptGroup['label'];
    /**
     * Array of available options
     * @since 10.19.0
     */
    options?: Option[];
    /**
     * Array of available option groups
     * @since 10.19.0
     */
    optgroups?: OptionGroup[];
    /**
     * Currently selected value
     * @since 10.19.0
     */
    value: Option;
}
export {};
