/*!
 * Copyright 2020 VMware, Inc.
 * SPDX-License-Identifier: BSD-2-Clause
 */
import { TrackByFunction } from '@angular/core';
import { TextIcon } from '../common/interfaces';
import { CliptextConfig } from '../lib/directives';
/**
 * Object representing an item of the dropdown
 */
interface DropdownItem<T extends DropdownItem<T>> {
    /**
     * The i18n key or a translated string for contents of a action button
     */
    textKey?: string;
    /**
     * List of items that will be grouped under this item
     */
    children?: T[];
    /**
     * The Clarity icon of the contextual button that is displayed if the button is featured.
     */
    icon?: string;
    /**
     * To mark if the {@link #ActionItem.textKey} has to be translated or not
     */
    isTranslatable?: boolean;
    /**
     * Css class of the dropdown item. Must be unique among all dropdown items within the dropdown items list
     */
    class?: string;
    /**
     * To add separators between groups of dropdown items
     */
    isSeparator?: boolean;
    /**
     * This is the busy state for the menu item. Used by extension actions of plugins
     */
    busy?: boolean;
}
/**
 * Dumb component used for displaying nested drop downs
 */
export declare class DropdownComponent<T extends DropdownItem<T>> {
    /**
     * If a icon should be displayed inside contextual buttons
     */
    shouldShowIcon: boolean;
    /**
     * If a text should be displayed inside contextual buttons
     */
    shouldShowText: boolean;
    /**
     * If the contextual buttons with icons should have a tooltip
     */
    shouldShowTooltip: boolean;
    /**
     * Default configuration for vcdShowClippedText directive
     */
    clipTextConfig: CliptextConfig;
    /**
     * Text Content of the button that opens the root dropdown when clicked
     */
    dropdownTriggerBtnTxt: string;
    /**
     * Icon shown in the button that opens the root dropdown when clicked
     */
    dropdownTriggerBtnIcon: string;
    /**
     * The {@link ngForTrackBy} method used for rendering of a dropdown actions or for rendering nested drop downs
     * NOTE: Without this, nested drop downs don't get rendered on the screen
     */
    trackByFunction: TrackByFunction<T>;
    /**
     * The position the root dropdown with respect to root dropdown trigger button. Refer to {@link clrPosition} for it's values
     */
    dropdownPosition: string;
    /**
     * The position of all the nested dropdowns {@link clrPosition}. Default is 'bottom-left'
     */
    nestedDropdownPosition: string;
    /**
     * Dropdown item click handler
     */
    onItemClickedCb: (item: T) => void;
    /**
     * Method to calculate disabled state of an item
     */
    isItemDisabledCb: (item: T) => boolean;
    /**
     * Used for displaying different button contents in the root dropdown trigger button vs nested dropdown trigger button
     */
    isNestedDropdown: boolean;
    isDropdownDisabled: boolean;
    private _dropdownItemContents;
    /**
     * Decides what goes into the action buttons
     * @param textIcon An enum that describes the possible ways to display the button title
     */
    set dropdownItemContents(textIcon: TextIcon);
    get dropdownItemContents(): TextIcon;
    private _items;
    /**
     * Nested list of dropdown objects
     */
    set items(items: T[]);
    get items(): T[];
    /**
     * Css class name added to the dropdown trigger buttons
     */
    dropdownTriggerButtonClassName: string;
    private flattenNestedItemsWithSingleChild;
    private flattenItemsWithSingleChild;
    /**
     * To check in the HTML, if a dropdown item of separator type should be used to add a separator item in the dropdown
     * This is required because,
     * 1. As each item decides its own availability, some groups may become empty and we collapse separators before them
     * 2. A separator is not required if it is the first item in the dropdown list
     * @param index Position of the dropdown item in the dropdown list
     * @param currentItem The current item in the list that is being iterated over
     */
    shouldRenderAsSeparator(index: number, currentItem: DropdownItem<T>): boolean;
}
export {};
