import { Merge } from '../utils';
import { WithInputAttributesProps } from './contexts';
export interface SelectInputOptionItem<T = string> {
    type: 'option';
    value: T;
    filterMatchers?: readonly string[];
    disabled?: boolean;
}
export interface SelectInputGroupItem<T = string> {
    type: 'group';
    label: string;
    options: readonly SelectInputOptionItem<T>[];
}
export interface SelectInputSeparatorItem {
    type: 'separator';
}
export type SelectInputItem<T = string> = SelectInputOptionItem<T> | SelectInputGroupItem<T> | SelectInputSeparatorItem;
export interface SelectInputProps<T = string, M extends boolean = false> {
    id?: string;
    name?: string;
    multiple?: M;
    placeholder?: string;
    items: readonly SelectInputItem<NonNullable<T>>[];
    defaultValue?: M extends true ? readonly T[] : T;
    value?: M extends true ? readonly T[] : T;
    compareValues?: (keyof NonNullable<T> & string) | ((a: T | undefined, b: T | undefined) => boolean);
    renderValue?: (value: NonNullable<T>, withinTrigger: boolean) => React.ReactNode;
    renderFooter?: (args: {
        resultsEmpty: boolean;
        queryNormalized: string | null | undefined;
    }) => React.ReactNode;
    renderTrigger?: (args: {
        content: React.ReactNode;
        placeholderShown: boolean;
        clear: (() => void) | undefined;
        disabled: boolean;
        size: 'sm' | 'md' | 'lg';
        className: string | undefined;
    }) => React.ReactNode;
    filterable?: boolean;
    filterPlaceholder?: string;
    disabled?: boolean;
    size?: 'sm' | 'md' | 'lg';
    className?: string;
    UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'] & {
        'aria-label'?: string;
    };
    onFilterChange?: (args: {
        query: string;
        queryNormalized: string | null;
    }) => void;
    onChange?: (value: M extends true ? T[] : T) => void;
    onClose?: () => void;
    onClear?: () => void;
}
export declare function SelectInput<T = string, M extends boolean = false>({ id: idProp, name, multiple, placeholder, items, defaultValue, value: controlledValue, compareValues, renderValue, renderFooter, renderTrigger, filterable, filterPlaceholder, disabled, size, className, UNSAFE_triggerButtonProps, onFilterChange, onChange, onClose, onClear, }: SelectInputProps<T, M>): import("react").JSX.Element;
type SelectInputTriggerButtonElementType = 'button' | React.ComponentType;
export type SelectInputTriggerButtonProps<T extends SelectInputTriggerButtonElementType = 'button'> = Merge<React.ComponentPropsWithoutRef<T>, {
    as?: T;
}>;
export declare function SelectInputTriggerButton<T extends SelectInputTriggerButtonElementType = 'button'>({ as, ...restProps }: SelectInputTriggerButtonProps<T>): import("react").JSX.Element;
export interface SelectInputOptionContentProps {
    title: string;
    note?: string;
    description?: string;
    icon?: React.ReactNode;
}
export declare function SelectInputOptionContent({ title, note, description, icon, }: SelectInputOptionContentProps): import("react").JSX.Element;
export {};
//# sourceMappingURL=SelectInput.d.ts.map