import { BaseComponentProps } from '../internal/base-component';
import { FormFieldValidationControlProps } from '../internal/context/form-field-context';
import { NonCancelableEventHandler } from '../internal/events';
import { OptionDefinition, OptionGroup as OptionGroupDefinition } from '../internal/components/option/interfaces';
import { DropdownStatusProps } from '../internal/components/dropdown-status/interfaces';
export interface BaseSelectProps extends BaseComponentProps, FormFieldValidationControlProps, DropdownStatusProps {
    disabled?: boolean;
    filteringType?: SelectProps.FilteringType;
    filteringPlaceholder?: string;
    filteringAriaLabel?: string;
    options?: SelectProps.Options;
    name?: string;
    placeholder?: string;
    controlId?: string;
    ariaRequired?: boolean;
    ariaLabel?: string;
    selectedAriaLabel?: string;
    renderHighlightedAriaLive?: SelectProps.ContainingOptionAndGroupString;
    noMatch?: React.ReactNode;
    empty?: React.ReactNode;
    statusType?: DropdownStatusProps.StatusType;
    onBlur?: NonCancelableEventHandler;
    onFocus?: NonCancelableEventHandler;
    onLoadItems?: NonCancelableEventHandler<SelectProps.LoadItemsDetail>;
    virtualScroll?: boolean;
}
export interface SelectProps extends BaseSelectProps {
    triggerVariant?: SelectProps.TriggerVariant;
    selectedOption: SelectProps.Option | null;
    onChange?: NonCancelableEventHandler<SelectProps.ChangeDetail>;
}
export declare namespace SelectProps {
    type FilteringType = 'none' | 'auto' | 'manual';
    type TriggerVariant = 'label' | 'option';
    type Option = OptionDefinition;
    type OptionGroup = OptionGroupDefinition;
    type Options = ReadonlyArray<Option | OptionGroup>;
    interface LoadItemsDetail {
        filteringText: string;
        firstPage: boolean;
        samePage: boolean;
    }
    interface ChangeDetail {
        selectedOption: Option;
    }
    interface ContainingOptionAndGroupString {
        (option: Option, group?: OptionGroup): string;
    }
    interface Ref {
        focus(): void;
    }
}
