/// <reference types="react" />
import { States } from '../../core/types';
import { ListBoxProps } from 'react-aria-components';
import type { Key as AriaKey } from 'react-aria-components';
export interface DropdownOption<T = any> {
    id: AriaKey;
    label: string;
    value?: T;
    disabled?: boolean;
    color?: string;
    icon?: string;
    groupName?: string;
}
type CommonDropdownPillProps<T> = {
    options?: DropdownOption<T>[];
    placeholder?: string;
    title?: string;
    supportTitle?: string;
    leftIcon?: React.ReactNode;
    rightIcon?: React.ReactNode;
    rightChild?: React.ReactNode;
    onLeftIconHover?: (e: React.MouseEvent) => void;
    onRightIconHover?: (e: React.MouseEvent) => void;
    onCreateOption?: (str: string) => void;
    onClear?: () => void;
    isRequired?: boolean;
    disabled?: boolean;
    errorMessage?: string;
    className?: string;
    style?: React.CSSProperties;
    state?: States;
    isSmall?: boolean;
    isPill?: boolean;
    containerProps?: React.HTMLAttributes<HTMLDivElement>;
    menuProps?: Omit<ListBoxProps<object>, 'children' | 'items' | 'selectedKeys' | 'disabledKeys'>;
};
export type SingleSelectProps<T> = {
    value?: AriaKey;
    onChange?: (value: T, option?: DropdownOption<T>) => void;
} & CommonDropdownPillProps<T>;
export type MultiSelectProps<T> = {
    value?: AriaKey[];
    onChange?: (values: T[], options?: DropdownOption<T>[]) => void;
} & CommonDropdownPillProps<T>;
export type DropdownPillProps<T extends any> = SingleSelectProps<T> | MultiSelectProps<T>;
/**
 * A helper function to tell if the component should be in single-select or multi-select mode.
 * Also, the TS engine will understand whether the argument of onChange is a single value or an array,
 * by looking at the props.value type. That's why we can use props.onChange easily after isMulti check in callOnChangeWithKeys fn.
 */
export declare function isMultiSelectProps<T>(props: DropdownPillProps<T>): props is MultiSelectProps<T>;
export {};
