/// <reference types="react" />
import { StyleTags, ReactElement } from '../../@declares';
import { KeyValueDict } from 'jmini';
import { InputTypes } from '.';
declare namespace Select {
    type Input<T = Value> = InputTypes.CoreInput<T> & React.DOMAttributes<HTMLInputElement> & {
        label?: ReactElement;
        isLabelActive?: boolean;
        placeholder?: string;
        tone?: InputTypes.BoxTone;
        tabIndex?: number;
        id?: string;
        disabled?: boolean;
        value?: T;
        options: Option<T>[];
        leftIndicator?: ReactElement | false;
        rightIndicator?: ReactElement | false;
        leftIcon?: ReactElement | false;
        rightIcon?: ReactElement | false;
        emptySelect?: boolean;
        SelectedCellStyles?: StyleTags.PropsNFreeCSS;
        SelectorCellStyles?: StyleTags.PropsNFreeCSS;
        SelectorMode?: 'original' | 'legacy';
        SelectorStyles?: StyleTags.PropsNFreeCSS;
        SelectorPosition?: 1 | 2 | 3 | 4;
    };
    type Value<T = any> = T extends infer V ? V : string | number | boolean | KeyValueDict | void | null;
    type Option<T = Value> = {
        type?: 'selector';
        value: T;
        label: ReactElement;
    } | {
        type: 'label';
        value?: T;
        label: ReactElement;
    };
    type WrapperStates = {
        rootStates: Input & {
            value: Value[];
        };
        val_preventOpenSelectorOnFocus: boolean;
        set_preventOpenSelectorOnFocus: React.Dispatch<React.SetStateAction<boolean>>;
        val_status: InputTypes.Status.Plain<Value>;
        set_status: React.Dispatch<React.SetStateAction<InputTypes.Status.Plain>>;
        val_validate: InputTypes.Validation.Result;
        set_validate: React.Dispatch<React.SetStateAction<InputTypes.Validation.Result>>;
        val_selectorOpen: boolean;
        set_selectorOpen: React.Dispatch<React.SetStateAction<boolean>>;
        val_optionFocused: Value;
        set_optionFocused: React.Dispatch<React.SetStateAction<Value>>;
    };
    type Component = {
        <T = Value>(p: Input<Value<T>>): JSX.Element;
    };
}
declare const Select: Select.Component;
export { Select, Select as default };
