/// <reference types="react" />
import { StyleProps, ReactElement } from '../../@declares';
import { Records } from 'jmini';
import { InputTypes } from '.';
declare namespace Select {
    type Value<T = any> = T extends infer V ? V : string | number | boolean | Records | void | null;
    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;
        selectedStyles?: StyleProps.StyleProps;
        selectorStyles?: StyleProps.StyleProps;
        pickerStyles?: StyleProps.StyleProps;
        pickerPosition?: 1 | 2 | 3 | 4;
        nativePicker?: boolean;
    };
    type Option<T = Value> = {
        type?: 'selector';
        id?: string;
        value: T;
        label?: ReactElement;
        selectedLabel?: ReactElement;
    } | {
        type: 'label';
        id?: string;
        value?: T;
        label?: ReactElement;
        selectedLabel?: ReactElement;
    };
    type WrapperStates = {
        rootStates: Input & {
            value: Value[];
        };
        val_status: InputTypes.Status<Value>;
        set_status: React.Dispatch<React.SetStateAction<InputTypes.Status>>;
        val_optionFocused: string | null;
        set_optionFocused: React.Dispatch<React.SetStateAction<string | null>>;
    };
    type Component = {
        <T = Value>(p: Input<Value<T>>): React.JSX.Element;
    };
}
declare const Select: Select.Component;
export { Select, Select as default };
