import { ChangeEvent, MouseEvent, ReactElement, ReactNode, ComponentProps, ComponentType } from 'react';
import { IconProp, IconLookup } from '@fortawesome/fontawesome-svg-core';
import { RadioButtonOption } from '../radio-button';
import { TooltipPlacementsType, TooltipDelayType } from '../tooltip';
import { AccentType, ButtonSize } from '../button';
import { ValueOf } from '../types';
export declare const DROPDOWN_MENU_SELECTBOX_SIZES: {
    readonly SM: "sm";
    readonly MD: "md";
    readonly LG: "lg";
    readonly XL: "xl";
};
export type DropdownMenuSelectboxSize = ValueOf<typeof DROPDOWN_MENU_SELECTBOX_SIZES>;
export type DropdownOnClickValueType = MouseEvent<HTMLElement> | string | boolean;
export type DropdownMenuOptionTooltip = Pick<DropdownMenuOption, 'tooltipPlacement' | 'tooltipText' | 'tooltipDocsLink' | 'tooltipTestId' | 'tooltipId'>;
export type DropdownRadioOptionType = DropdownMenuOptionTooltip & RadioButtonOption & {
    id: string;
    key: string;
    title: string;
    subtext: string;
    label: string;
    activeItemId?: string;
    privateKey?: string;
};
export type DropdownMenuOption = {
    id?: string;
    key: string | number;
    testId?: string;
    link?: string;
    icon?: IconProp;
    iconClass?: string;
    className?: string;
    /** Allow title to be a string or a React element.  */
    title?: ReactNode;
    /** description text positioned underneath the title */
    subtext?: ReactNode;
    /** If title prop is a React element, use searchableValue key to make search */
    searchableValue?: string;
    value?: string | number;
    disabled?: boolean;
    tooltipText?: ReactNode;
    tooltipTestId?: string;
    tooltipPlacement?: TooltipPlacementsType;
    tooltipDocsLink?: ReactElement;
    isChecked?: boolean;
    /** File Upload */
    isFileUpload?: boolean;
    acceptedFiles?: Array<string>;
    isMultiple?: boolean;
    /** By default all options are shown and this prop is not required to be passed. isShown can be used for cases when there are specific conditions to showing items */
    isShown?: boolean;
    /** if true, dropdown will remain open after option click */
    shouldNotCloseDropdown?: boolean;
    isFolderUpload?: boolean;
    level?: string;
    privateKey?: string;
    subOptions?: Array<DropdownMenuOption>;
    radioOptions?: Array<DropdownRadioOptionType>;
    redirect?: (e: DropdownOnClickValueType) => void;
    isExternal?: boolean;
    subItems?: Array<DropdownMenuOption>;
    activeItemId?: string;
    onOptionSelect?: () => void;
    groupIdentifier?: string;
    tooltipId?: string;
    /** This has the highest priority. Use this override for custom links which does not align with standard approach */
    LinkComponent?: LinkComponentType;
};
export type DropdownFiles = {
    selectedFiles: FileList | null;
};
export type DropdownOnChangeValueType = DropdownOnClickValueType | ChangeEvent<HTMLInputElement>;
export type DropdownOnMouseEnterValueType = MouseEvent<HTMLElement> | ChangeEvent<HTMLInputElement> | string;
export type DropdownOnMouseLeaveValueType = MouseEvent<HTMLElement> | ChangeEvent<HTMLInputElement> | string;
export type SelectboxSelectedItem = {
    key: string | number;
    /** Allow title to be a string or a React element.  */
    title?: ReactNode;
    /** In a selectbox, will be shown under the selected item title */
    subtext?: ReactNode;
};
export type DropdownTriggerOnClickHandler = (menu: {
    isOpen?: boolean;
}, isKeyEvent?: boolean) => void;
export interface DropdownTrigger {
    /** Default trigger text or node to show if there are no options selected. */
    defaultTriggerText?: ReactNode;
    triggerClassName?: string;
    triggerAriaLabelText?: string;
    triggerDynamicContentWrapperClassName?: string;
    /** A dynamic handler that provides an ability to put custom content into trigger button. If defined, selectedItem and defaultTriggerText would be ommited on render */
    triggerDynamicContent?: (menu: {
        isOpen?: boolean;
    }) => ReactNode;
    /** applies wide click area around the icon */
    triggerIsIcon?: boolean;
    /** A dynamic handler called every time dropdown is toggled */
    triggerOnClickHandler?: DropdownTriggerOnClickHandler;
    /** Trigger element id. */
    triggerId?: string;
    /** Trigger test id. */
    triggerTestId?: string;
    triggerTourId?: string;
    triggerTooltip?: string;
    /** Trigger tooltip placement */
    triggerTooltipPlacement?: TooltipPlacementsType;
    /** A link to docs that will be added to the trigger tooltip */
    triggerTooltipDocLink?: ReactElement;
    /** The label to display next to the dropdown, describing what is being selected. */
    triggerHideChevron?: boolean;
    labelText?: ReactNode;
    selectedItemTestId?: string;
    helperText?: string;
    required?: boolean;
    triggerAccentType?: AccentType;
    triggerTooltipDelayType?: TooltipDelayType;
    triggerTabIndex?: number;
    triggerRightIcon?: IconLookup | null;
    dropdownContentId?: string;
    triggerButtonSize?: ButtonSize;
}
export interface DropdownSelectboxTriggerOptions extends DropdownTrigger {
    helperText: string;
    required: boolean;
}
export type TriggerContent = {
    /** If provided, item's title will be shown instead of defaultTriggerText */
    selectedItem: SelectboxSelectedItem;
    /** Default trigger text or node to show if there are no options selected. */
    defaultTriggerText: ReactNode;
};
export type DropdownSelectbox = {
    size?: DropdownMenuSelectboxSize;
    fitWidthToSelector?: string;
};
export declare const MENU_ROLE: {
    MENUITEM: string;
    MENUITEMCHECKBOX: string;
    MENUITEMRADIO: string;
};
export type LinkComponentProps<T = ComponentProps<any>> = {
    option: DropdownMenuOption;
    disabled?: boolean;
} & T;
export type LinkComponentType = ComponentType<LinkComponentProps>;
