import React, { KeyboardEventHandler } from 'react';
import { SelectComponents } from 'react-select/dist/declarations/src/components';
import { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager';
import { FieldWrapperProps } from '@parlor/components/select-v4/helpers';
import { FormAwareProps } from '@parlor/ui/form';
import { Selectable } from './utils/types';
export type Option = {
    Component?: (value: ThisType<any>) => JSX.Element;
    id: string;
};
export type SelectProps<T extends Option, IsMulti extends boolean> = Omit<StateManagerProps<T>, 'ref' | 'onChange' | 'components' | 'placeholder' | 'placement' | 'menuPlacement'> & FormAwareProps & FieldWrapperProps & Selectable<T, IsMulti> & {
    /**
     * isCreatable
     */
    isCreatable?: boolean;
    /**
     * custom components to building Select component
     */
    components: Partial<SelectComponents<T, IsMulti, any>>;
    /**
     * custom properties
     */
    customProps?: Record<string, any>;
    /**
     *
     */
    menuIsWithArrow?: boolean;
    /**
     * reference element
     */
    menuReferenceElement?: React.RefObject<HTMLDivElement>;
    /**
     * onKeyDownHandler
     */
    onKeyDown?: KeyboardEventHandler;
    /**
     * Handle Input Change
     */
    onInputChange?: (searchTerm?: string) => void;
};
export declare const Select: <T extends Option, IsMulti extends boolean = false>({ components, extraOptions, onInputChange, onKeyDown, getOptionValue, menuIsWithArrow, menuPlacement, menuReferenceElement, options, placeholder, isCreatable, renderOption, selectorControlsRef, showPlaceholderWhen, isDisabled, styles, menuWidth, wrap, isThreeDots, loadOptions, onChange, value: selectValue, defaultValue, isMulti, onMenuOpen, onMenuClose, onSearch, filterOptions, noOptionsMessage, portalElement, ...props }: SelectProps<T, IsMulti>) => JSX.Element;
