import * as React from 'react';
import { SelectProps as MuiSelectProps } from '@mui/material/Select';
import { ListItemButtonProps } from '../list/ListItemButton';
export declare const selectVariants: readonly ["rounded", "circular", "transparent"];
export declare const selectSizes: readonly ["S", "M"];
type Colors = {
    backgroundColor?: string;
    color?: string;
    selectedColor?: string;
    hoverColor?: string;
    borderColor?: string;
};
type SelectValue<T extends string | number | undefined, Multiple extends boolean | undefined> = Multiple extends undefined | false ? T : T[];
/**
 * NOTE: there is a limitation to perfectly model this SelectProps. Currently, when using the Select component
 * we will have to set explicit multiple={false} to get the right typings and make TypeScript happy. This is probably
 * a bug in TypeScript compiler. Take a look at this article:
 * https://blog.andrewbran.ch/expressive-react-component-apis-with-discriminated-unions/#fn-1
 * Also, the related bug looks to be this:
 * https://github.com/Microsoft/TypeScript/issues/29340
 */
export type SelectProps<T extends string | number | undefined, Multiple extends boolean | undefined, Value = SelectValue<T, Multiple>> = Pick<MuiSelectProps<T>, 'id' | 'children' | 'sx' | 'disabled' | 'onClose'> & {
    variant?: (typeof selectVariants)[number];
    /**
     * The placeholder to put in this Select when no value is selected.
     */
    placeholder?: string;
    /**
     * All available options to be listed as selectable when Select is open.
     */
    options?: ({
        value: T;
        label?: string;
    } & Pick<ListItemButtonProps, 'disabled' | 'color' | 'endIconId' | 'startIconId' | 'startAdornment' | 'endAdornment' | 'typographyVariant' | 'sx'>)[];
    /**
     * Whether allow user to select multiple options or not
     */
    multiple?: Multiple;
    /**
     * The current value of Select
     */
    value: Value;
    /**
     * Whether to use or not virtualized list to render component. It is only compatible with single selection value, not multiple.
     */
    virtualized?: boolean;
    /**
     * Configuration of options list when using virtualization such as pixels width or number of overscan elements. Default value is {width: 250, overscanCount: 3, itemSize: 44}.
     */
    virtualizedProps?: {
        width?: number;
        overscanCount?: number;
        itemSize?: number;
    };
    /**
     * Called when selected data is changed by the user
     */
    onChange?: (data: Value) => void;
    /**
     * Render of the selected value
     */
    renderValue?: (value: T | T[], options?: ({
        value: T;
        label?: string;
    } & Pick<ListItemButtonProps, 'disabled' | 'color' | 'endIconId' | 'startIconId' | 'startAdornment' | 'endAdornment' | 'typographyVariant' | 'sx'>)[]) => React.ReactNode;
    /**
     * The z-index of the menu when open
     */
    menuZIndex?: number;
    /**
     * The color of the menu
     */
    menuColors?: Colors;
    /**
     * The max height of the menu when open
     */
    menuMaxHeight?: string;
    /**
     * The minimum width (in px) of the dropdown menu.
     * Defaults to 200.
     */
    minMenuWidth?: number;
    /**
     * The maximum width (in px) of the dropdown menu. Defaults to 400.
     * When `virtualized=true`, the menu width is fixed to `minMenuWidth` by default,
     * but `maxMenuWidth` still acts as an upper cap if `virtualizedProps.width` exceeds it.
     */
    maxMenuWidth?: number;
    /**
     * Ref to inner HTMLSelectElement
     */
    ref?: React.Ref<HTMLSelectElement>;
    size?: (typeof selectSizes)[number];
    className?: string;
    paperClassName?: string;
    'data-testid'?: string;
    open?: boolean;
    onOpen?: () => void;
};
export declare const BootstrapInput: import("@emotion/styled").StyledComponent<import("@mui/material/InputBase").InputBaseProps & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
type SelectComponent = <T extends string | number | undefined = string | number | undefined, Multiple extends boolean | undefined = undefined, Value = SelectValue<T, Multiple>>(props: SelectProps<T, Multiple, Value>) => React.ReactElement | null;
declare const _default: SelectComponent;
export default _default;
