import './Select.global.scss';
import React, { ReactElement, Ref } from 'react';
import { OverlayProps } from '../Overlay/Overlay';
import { Color } from '../../../util/Color';
export type Option<KeyName extends string> = {
    [keyName in KeyName]: string;
} & Record<any, any> & {
    options?: Option<KeyName>[];
};
export type TOptionGroup<T> = {
    name: string;
    options: T[];
};
export type TSelectOptionKey<T> = TOptionGroup<T> | T;
export type SelectProps<TOption extends Option<KeyName>, KeyName extends string> = {
    options: TSelectOptionKey<TOption>[];
    keyName: KeyName;
    value?: TOption[KeyName];
    labelName?: TOption[keyof TOption];
    target?: HTMLElement | null;
    open?: boolean;
    onClose?: (e: Event) => void;
    onChange?: (value: TOption[KeyName]) => void;
    className?: string;
    offset?: [number, number];
    renderOption?: (option?: TOption) => ReactElement | null;
    renderLabel?: (option?: TOption | null) => ReactElement | null;
    nativeOnMobile?: boolean;
    overlay?: Partial<Omit<OverlayProps, 'children' | 'open' | 'container' | 'followElement' | 'onClose' | 'overlayRef'>>;
    hideExpandIcon?: boolean;
    inputLabelColor?: Color;
    disableNative?: boolean;
    renderNoOptions?: (targetRef: React.RefObject<HTMLSpanElement>) => ReactElement | null;
};
export declare const InnerSelect: <TOption extends Option<KeyName>, KeyName extends string>({ target, open, onClose, options, value, onChange, keyName, labelName, className, offset, renderOption, nativeOnMobile, overlay, renderLabel, hideExpandIcon, inputLabelColor, disableNative, renderNoOptions, }: SelectProps<TOption, KeyName>, ref: Ref<HTMLDivElement | null>) => React.JSX.Element;
export declare const Select: <TOption extends Option<KeyName>, KeyName extends string>(p: SelectProps<TOption, KeyName> & {
    ref?: Ref<HTMLDivElement>;
}) => JSX.Element;
export interface IDefaultSelectOption {
    value: string;
    text: string;
}
