/*!
 * Copyright 2020 VMware, Inc.
 * SPDX-License-Identifier: BSD-2-Clause
 */
import { TrackByFunction } from '@angular/core';
import { ActionDisplayConfig, ActionItem, ActionStyling } from '../common/interfaces';
/**
 * To add default values to configs if they are not provided by the caller in the input config
 */
export declare function getDefaultActionDisplayConfig(cfg?: ActionDisplayConfig): ActionDisplayConfig;
/**
 * Renders actions in screens containing grids, cards and details container screens
 * R is the type of selected entity on which the action will be performed
 * T is the type of custom data passed to action handler methods
 */
export declare class ActionMenuComponent<R, T> {
    private _actions;
    /**
     * List of actions containing both static and contextual that are given by the calling component
     */
    set actions(actions: ActionItem<R, T>[]);
    get actions(): ActionItem<R, T>[];
    /**
     * Used by the {@link EntityActionExtensionComponentsDirective} to provide the extension actions from plugins after
     * they are created asynchronously
     * @param val List of extension actions
     */
    set extensionEntityActions(val: ActionItem<unknown, unknown>[]);
    private _extensionEntityActions;
    /**
     * When there are no nested actions and if none of the contextual actions are marked to be featured, they are shown inline
     */
    shouldDisplayContextualActionsDropdown: boolean;
    private _actionDisplayConfig;
    /**
     * Display configuration of both static and contextual actions
     * If null or undefined is passed, default config {@link _actionDisplayConfig} is used
     */
    set actionDisplayConfig(config: ActionDisplayConfig);
    get actionDisplayConfig(): ActionDisplayConfig;
    calculateActionsAvailability: boolean;
    /**
     * Text Content of the action menu dropdown trigger button. Used when {@link #actionDisplayConfig} styling is
     * {@link ActionStyling.DROPDOWN}
     */
    dropdownTriggerBtnText: string;
    inlineDropdownTriggerBtnText: string;
    /**
     * Icon of the action menu dropdown trigger button. Used when {@link #actionDisplayConfig} styling is
     * {@link ActionStyling.DROPDOWN}
     */
    dropdownTriggerBtnIcon: string;
    /**
     * Used for disabling the menu bar or menu dropdown
     */
    disabled: boolean;
    /**
     * The list of entities selected on which contextualActions are performed
     */
    selectedEntities: R[];
    /**
     * The direction with respect to the root dropdown trigger button in which the root drop down should open
     * {@link DropdownComponent.dropdownPosition}
     */
    dropdownPosition: string;
    /**
     * The direction in which the nested drop downs open. {@link DropdownComponent.nestedDropdownPosition}
     */
    nestedDropdownPosition: string;
    /**
     * 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;
    /**
     * Used in the html template
     */
    actionStyling: typeof ActionStyling;
    /**
     * Returns the actions to be shown
     */
    getAvailableActions(actions: ActionItem<R, T>[]): ActionItem<R, T>[];
    /**
     * An action whose availability is false but has the disabled state set to true is still shown on the screen in
     * disabled mode
     */
    private isActionAvailable;
    /**
     * List of only the actions that are marked as {@link ActionType.STATIC}
     */
    get staticActions(): ActionItem<R, T>[];
    /**
     * List of only the actions that are marked as {@link ActionType.STATIC_FEATURED}
     */
    get staticFeaturedActions(): ActionItem<R, T>[];
    /**
     * List containing all the static actions. It has static featured actions in the beginning of the list followed by
     * non-featured static actions as children of grouped action called 'vcd.cc.action.menu.all.actions'
     */
    get staticDropdownActions(): ActionItem<R, T>[] | object;
    /**
     * Actions that depend on selected entities and belong to main menu list. The returned list length is less than the
     * configured featured count in {@link actionDisplayConfig}
     */
    get contextualFeaturedActions(): ActionItem<R, T>[];
    /**
     * Extracts the nested actions that are marked as featured and returns them as part of a flat list
     */
    private getFlattenedActionList;
    /**
     * Actions that depend on selected entities but belong to sub menu
     */
    get contextualActions(): ActionItem<R, T>[];
    /**
     * Execute the {@link ActionItem.handler} function by passing it {@link #selectedEntities} and
     * {@link ActionItem.handlerData} as arguments
     */
    runActionHandler(action: ActionItem<R, T>): void;
    /**
     * To disable a displayed action
     */
    isActionDisabled(action: ActionItem<R, T>): boolean;
    /**
     * Used as {@link ngForTrackBy} input value when iterating over action lists {@link DropdownComponent.trackByFunction}
     * Without this method as input for ngForTrackBy, the dropdown gets rendered off screen
     */
    actionsTrackBy: TrackByFunction<ActionItem<R, T>>;
    /**
     * To show or hide the container elements containing inline and also dropdown actions
     */
    shouldDisplayActions(style: ActionStyling): boolean;
    /**
     * To show or hide {@link ActionType.STATIC_FEATURED} actions in inline actions container
     */
    shouldDisplayStaticFeaturedActions(style: ActionStyling): boolean;
    /**
     * To show or hide {@link ActionType.STATIC} actions in inline or dropdown action containers
     */
    shouldDisplayStaticActions(style: ActionStyling): boolean;
    /**
     * To show or hide {@link ActionType.CONTEXTUAL} and {@link ActionType.CONTEXTUAL_FEATURED} actions in inline or
     * dropdown action containers
     */
    shouldDisplayContextualActions(style: ActionStyling): boolean;
    /**
     * To show or hide {@link ActionType.STATIC_FEATURED} and {@link ActionType.STATIC} actions in a dropdown
     */
    get shouldDisplayStaticAndStaticFeaturedActionsDropdown(): boolean;
}
/**
 * Without the deep copy, the changes made to any of the action children in one of the methods will persist in other methods
 */
export declare function getDeepCopyOfActionItems<R, T>(actions: ActionItem<R, T>[]): ActionItem<R, T>[];
