import { ListCollection, Select as ChakraSelect } from '@chakra-ui/react';
import * as React from 'react';
export type ViewMode = 'default' | 'compact';
export type OnValueChangeHandler = (details: {
    value: Array<string>;
}) => void;
export interface SelectOption<Value extends string = string> {
    label: string;
    renderLabel?: (place: 'item' | 'value-text') => React.ReactNode;
    value: Value;
    icon?: React.ReactNode;
    afterElement?: React.ReactNode;
}
export interface SelectControlProps extends ChakraSelect.ControlProps {
    noIndicator?: boolean;
    triggerProps?: ChakraSelect.TriggerProps;
    loading?: boolean;
}
export declare const SelectControl: React.ForwardRefExoticComponent<SelectControlProps & React.RefAttributes<HTMLButtonElement>>;
export declare const SelectClearTrigger: React.ForwardRefExoticComponent<ChakraSelect.ClearTriggerProps & React.RefAttributes<HTMLButtonElement>>;
interface SelectContentProps extends ChakraSelect.ContentProps {
    portalled?: boolean;
    portalRef?: React.RefObject<HTMLElement>;
}
export declare const SelectContent: React.ForwardRefExoticComponent<SelectContentProps & React.RefAttributes<HTMLDivElement>>;
export interface SelectItemProps extends ChakraSelect.ItemProps {
    item: SelectOption;
}
export declare const SelectItem: React.ForwardRefExoticComponent<SelectItemProps & React.RefAttributes<HTMLDivElement>>;
interface SelectValueTextProps extends Omit<ChakraSelect.ValueTextProps, 'children'> {
    children?(items: Array<SelectOption>): React.ReactNode;
    size?: SelectRootProps['size'];
    required?: boolean;
    invalid?: boolean;
    errorText?: string;
    mode?: ViewMode;
    multipleConfig?: {
        term?: string;
        icon?: React.ReactNode;
    };
}
export declare const SelectValueText: React.ForwardRefExoticComponent<SelectValueTextProps & React.RefAttributes<HTMLSpanElement>>;
export interface SelectRootProps extends ChakraSelect.RootProps {
}
export declare const SelectRoot: ChakraSelect.RootComponent;
interface SelectItemGroupProps extends ChakraSelect.ItemGroupProps {
    label: React.ReactNode;
}
export declare const SelectItemGroup: React.ForwardRefExoticComponent<SelectItemGroupProps & React.RefAttributes<HTMLDivElement>>;
export declare const SelectLabel: React.ForwardRefExoticComponent<ChakraSelect.LabelProps & React.RefAttributes<HTMLLabelElement>>;
export declare const SelectItemText: React.ForwardRefExoticComponent<ChakraSelect.ItemTextProps & React.RefAttributes<HTMLDivElement>>;
export interface SelectProps extends SelectRootProps {
    collection: ListCollection<SelectOption>;
    placeholder: string;
    portalled?: boolean;
    loading?: boolean;
    errorText?: string;
    contentProps?: SelectContentProps;
    controlProps?: SelectControlProps;
    contentHeader?: React.ReactNode;
    multipleConfig?: SelectValueTextProps['multipleConfig'];
    itemFilter?: (item: SelectOption) => boolean;
    mode?: ViewMode;
}
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLDivElement>>;
export interface SelectAsyncProps extends Omit<SelectProps, 'collection'> {
    placeholder: string;
    portalled?: boolean;
    loading?: boolean;
    loadOptions: (input: string, currentValue: Array<string>) => Promise<ListCollection<SelectOption>>;
    extraControls?: React.ReactNode;
    mode?: ViewMode;
}
export declare const SelectAsync: React.ForwardRefExoticComponent<SelectAsyncProps & React.RefAttributes<HTMLDivElement>>;
export {};
