import type { CSSProperties, Key, ReactNode } from "react";
import { Component } from "react";
import type { SelectButtonProps } from "../../../core/components/SelectButton";
import type { IconName } from "../../../ui";
export interface SelectProps<TValue, TOption = SelectOption<TValue>> {
    className?: string;
    options?: TOption[];
    sections?: SelectSection<TOption>[];
    children?: ReactNode;
    value: TValue;
    name?: string;
    defaultValue?: TValue;
    onChange?: (event: SelectChangeEvent<TValue>) => void;
    multiple?: boolean;
    placeholder?: string;
    disabled?: boolean;
    hiddenIcons?: boolean;
    isInitiallyOpen?: boolean;
    triggerElement?: ReactNode;
    onClose?: () => void;
    buttonProps?: Partial<SelectButtonProps>;
    buttonText?: string;
    searchProp?: string;
    searchCaseInsensitive?: boolean;
    searchPlaceholder?: string;
    searchFuzzy?: boolean;
    globalSearch?: boolean;
    hideEmptySectionsInSearch?: boolean;
    width?: number;
    optionNameFn?: (option: TOption) => string | undefined;
    optionValueFn?: (option: TOption) => TValue;
    optionDescriptionFn?: (option: TOption) => string | undefined;
    optionSectionFn?: (option: TOption) => string;
    optionDisabledFn?: (option: TOption) => boolean;
    optionIconFn?: (option: TOption) => IconName | undefined;
    optionClassNameFn?: (option: TOption) => string | undefined;
    optionStylesFn?: (option: TOption) => CSSProperties | undefined;
    footer?: ReactNode;
    "data-testid"?: string;
}
export interface SelectOption<TValue = Key> {
    value: TValue;
    name?: string;
    description?: string;
    icon?: IconName;
    iconSize?: number;
    iconColor?: string;
    disabled?: boolean;
    children?: ReactNode;
}
export interface SelectSection<TOption = SelectOption> {
    name?: string;
    icon?: IconName;
    items: TOption[];
}
export interface SelectChangeEvent<TValue> {
    target: SelectChangeTarget<TValue>;
}
export interface SelectChangeTarget<TValue> {
    name?: string;
    value: TValue;
}
/**
 * @deprecated: use Select from "../../../ui"
 */
declare const Select: {
    new (props: any): {
        state: {
            value: any;
        };
        handleChange: (e: any) => void;
        render(): import("react/jsx-runtime").JSX.Element;
        context: unknown;
        setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
        forceUpdate(callback?: (() => void) | undefined): void;
        readonly props: Readonly<any>;
        refs: {
            [key: string]: import("react").ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): boolean;
        componentWillUnmount?(): void;
        componentDidCatch?(error: Error, errorInfo: import("react").ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>): any;
        componentDidUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>, snapshot?: any): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
    };
    displayName: string;
    propTypes: any;
    contextType?: import("react").Context<any> | undefined;
};
export default Select;
export interface OptionSectionProps {
    name?: string;
    icon?: IconName;
    children?: ReactNode;
}
export declare class OptionSection extends Component<OptionSectionProps> {
    render(): null;
}
export interface OptionProps<TValue> {
    value: TValue;
    name?: string;
    children?: ReactNode;
    icon?: IconName;
    disabled?: boolean;
}
export declare class Option<TValue> extends Component<OptionProps<TValue>> {
    render(): null;
}
