/// <reference types="react" />
import { ButtonProps } from '../Button/Button.types';
import { DropdownPlacement } from '../Dropdown/Dropdown.types';
import { MenuProps, MenuRef } from '../MenuImperative/MenuImperative.types';
import { OverlayTriggerProps } from '../OverlayTrigger';
export declare type SelectPlacement = DropdownPlacement;
declare type DivProps = React.ComponentPropsWithoutRef<'div'>;
export interface SelectMenuProps extends Omit<DivProps, 'onSelect' | 'onDragEnd'> {
    /**
     * @since 10.19.0
     */
    emptyMessage?: string;
    /**
     * @since 10.19.0
     */
    footer?: React.ReactNode;
    /**
     * @since 10.19.0
     */
    i18nScope?: string;
    /**
     * @since 10.19.0
     */
    onClear?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
    /**
     * @since 10.19.0
     */
    onScrollBottom?: MenuProps['onScrollBottom'];
    /**
     * @since 10.19.0
     */
    onSearch?: (event: React.ChangeEvent<HTMLInputElement>) => void;
    /**
     * @since 10.19.0
     */
    onSelect?: MenuProps['onSelect'];
    /**
     * @since 10.19.0
     */
    optionsRef?: React.RefObject<HTMLDivElement>;
    /**
     * @since 10.19.0
     */
    menuRef: React.RefObject<MenuRef>;
}
export interface SelectOptionProps extends DivProps {
    /**
     * @since 10.19.0
     */
    index?: number;
    /**
     * @since 10.19.0
     */
    value: any;
    /**
     * @since 10.19.0
     */
    disabled?: boolean;
    /**
     * Represents the currently selected value. This option will be styled
     * differently as well as receive UX to scroll into view and start list
     * navigation from this element.
     * @since 10.19.0
     */
    selected?: boolean;
    /**
     * If nothing is selected, suggest this option. Suggested options mimic the
     * UX of a selected option, scroll into view and start list navigation from
     * this element.
     * @since 10.19.0
     */
    suggested?: boolean;
}
interface QaTags {
    /**
     * @since 10.19.0
     */
    label: string;
    /**
     * @since 10.19.0
     */
    clear: string;
}
export interface SelectProps extends Omit<DivProps, 'onSelect'> {
    /**
     * @since 10.19.0
     */
    afterHide?: OverlayTriggerProps['afterHide'];
    /**
     * @since 10.19.0
     */
    afterShow?: OverlayTriggerProps['afterShow'];
    /**
     * @since 10.19.0
     */
    beforeHide?: OverlayTriggerProps['beforeHide'];
    /**
     * @since 10.19.0
     */
    beforeShow?: OverlayTriggerProps['beforeShow'];
    /**
     * Make the Select button 100% width
     * @since 10.19.0
     */
    block?: boolean;
    /**
     * @default false
     * @since 10.19.0
     */
    disabled?: boolean;
    /**
     * When there are no children this will render
     * @since 10.19.0
     */
    emptyMessage?: string;
    /**
     * @default false
     * @since 10.19.0
     */
    error?: boolean;
    /**
     * @since 10.19.0
     */
    footer?: React.ReactNode;
    /**
     * @since 10.19.0
     */
    hideDelay?: number;
    /**
     * The i18n key to use for the select's configurable strings.
     * Defaults to using the core library's default strings.
     * @since 10.19.0
     */
    i18nScope?: string;
    /**
     * @since 10.19.0
     */
    label?: React.ReactNode;
    /**
     * If the select is loading
     * @default false
     * @since 10.19.0
     */
    loading?: boolean;
    /**
     * It is possible for this component to have an empty value
     * (render placeholder). Enables the x icon.
     * @since 10.19.0
     */
    onClear?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
    /**
     * Optional <Code>function</Code> that automatically executes when
     * scrolling reaches the last item.
     * @since 10.19.0
     */
    onScrollBottom?: MenuProps['onScrollBottom'];
    /**
     * Adds a search bar to the select.
     * @since 10.19.0
     */
    onSearch?: (event: React.ChangeEvent<HTMLInputElement>) => void;
    /**
     * @since 10.19.0
     */
    onSelect?: MenuProps['onSelect'];
    /**
     * @since 10.19.0
     */
    optionsRef?: React.RefObject<HTMLDivElement>;
    /**
     * Renders when the label is blank
     * @since 10.19.0
     */
    placeholder?: string;
    /**
     * The placement of the overlay
     * @default 'bottom-left'
     * @since 10.19.0
     */
    placement?: SelectPlacement;
    /**
     * @since 10.19.0
     */
    qa?: Partial<QaTags>;
    /**
     * @since 10.19.0
     */
    showDelay?: number;
    /**
     * Configurable tabIndex for the select button
     * @default 0
     * @since 10.19.0
     */
    tabIndex?: number;
}
export interface SelectButtonProps extends DivProps {
    /**
     * @since 10.19.0
     */
    block?: ButtonProps['block'];
    /**
     * @since 10.19.0
     */
    clearRef?: React.RefObject<HTMLButtonElement>;
    /**
     * @since 10.19.0
     */
    disabled?: ButtonProps['disabled'];
    /**
     * @since 10.19.0
     */
    dropdown?: boolean;
    /**
     * @since 10.19.0
     */
    error?: boolean;
    /**
     * @since 11.9.0
     * If the component should apply a focus appeareance. This is
     * not DOM focus management, and purely visual.
     */
    focus?: boolean | ((obj: {
        open: boolean;
    }) => boolean);
    /**
     * @since 10.19.0
     */
    icon?: ButtonProps['icon'];
    /**
     * @since 10.19.0
     */
    label?: React.ReactNode;
    /**
     * @since 10.19.0
     */
    loading?: ButtonProps['loading'];
    /**
     * @since 10.19.0
     */
    onClear?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
    /**
     * @since 10.19.0
     */
    open?: boolean;
    /**
     * @since 10.19.0
     */
    placeholder?: string;
    /**
     * @since 10.19.0
     */
    qa?: Partial<QaTags>;
    /**
     * @since 10.19.0
     */
    size?: ButtonProps['size'];
    /**
     * @since 10.19.0
     */
    tabIndex?: number;
    /**
     * @since 10.19.0
     */
    type?: ButtonProps['type'];
    /**
     * @since 10.19.0
     */
    variant?: ButtonProps['variant'];
    /**
     * @since 10.19.0
     */
    isMenuOpened?: boolean;
}
export {};
