import { AfterViewInit, EventEmitter, OnInit, TemplateRef } from '@angular/core';
import { NgxPopperjsContentComponent } from 'ngx-popperjs';
import { NodeService, WorkflowPrompt } from '../../classes';
import { AbstractBaseGroup } from '../../classes/nodes';
import { InputTypes, LocalizedStringKeys, NodeTypes } from '../../enum';
import { AllowedValues, AllowedValuesMap, BpmnNode, NodeWithInput, RecordOfAnyType, WorkflowNode } from '../../types';
import { EmailInput, Select, DateType } from '../../types/base.types';
import { IDropdownSettings } from 'ng-multiselect-dropdown';
import { LocalizationProviderService } from '../../services';
import * as i0 from "@angular/core";
export declare class GroupComponent<E> implements OnInit, AfterViewInit {
    private readonly nodes;
    private readonly localizationSvc;
    constructor(nodes: NodeService<E>, localizationSvc: LocalizationProviderService);
    inputType: typeof InputTypes;
    private isMouseDown;
    group: AbstractBaseGroup<E>;
    isLast: boolean;
    isFirst: boolean;
    eventGroups: AbstractBaseGroup<E>[];
    nodeType: NodeTypes;
    popupTemplate: NgxPopperjsContentComponent;
    remove: EventEmitter<boolean>;
    add: EventEmitter<boolean>;
    eventAdded: EventEmitter<unknown>;
    eventRemoved: EventEmitter<unknown>;
    actionAdded: EventEmitter<unknown>;
    itemChanged: EventEmitter<unknown>;
    date: DateType;
    dateTime: any;
    emailInput: EmailInput;
    dropdownSettings: IDropdownSettings;
    selectedItems: never[];
    showDateTimePicker: boolean;
    enableActionIcon: boolean;
    events: WorkflowNode<E>[];
    triggerEvents: WorkflowNode<E>[];
    actions: WorkflowNode<E>[];
    nodeList: WorkflowNode<E>[];
    showsTooltip: boolean;
    tooltipText: string;
    topPosition: any;
    leftPosition: any;
    types: typeof NodeTypes;
    prevPopperRef: NgxPopperjsContentComponent;
    typeSubjectPlaceholder: string;
    typeEmailPlaceholder: string;
    localizedStringKeys: typeof LocalizedStringKeys;
    templateMap?: {
        [key: string]: TemplateRef<RecordOfAnyType>;
    };
    allColumns: Select[];
    emailTemplate: TemplateRef<RecordOfAnyType>;
    listTemplate: TemplateRef<RecordOfAnyType>;
    numberTemplate: TemplateRef<RecordOfAnyType>;
    textTemplate: TemplateRef<RecordOfAnyType>;
    searchableDropdownTemplate: TemplateRef<RecordOfAnyType>;
    dateTemplate: TemplateRef<RecordOfAnyType>;
    dateTimeTemplate: TemplateRef<RecordOfAnyType>;
    /**
     * It gets the events and actions from the nodes service and stores them in the events and actions
     * variables
     */
    ngOnInit(): void;
    /**
     * If the user has provided a custom template for a given input type, use that template. Otherwise,
     * use the default template
     */
    ngAfterViewInit(): void;
    /**
     * If the input is a value input, then set the value of the input to the value of the node
     * @param {WorkflowPrompt} input - WorkflowPrompt - The input that was passed in from the workflow.
     * @param nodeWithInput - The node that has the input.
     */
    setInput(input: WorkflowPrompt, nodeWithInput: NodeWithInput<E>): void;
    /**
     * The removeClick() function emits a boolean value of true to the parent component
     */
    removeClick(): void;
    /**
     * The addClick() function emits the add event, which is a boolean value of true
     */
    addClick(): void;
    /**
     * If the focusKey is subject, append the value of the item to the subject. If the focusKey is body,
     * append the value of the item to the body
     * @param {Select} item - Select - this is the item that was selected from the dropdown
     * @param {EmailInput} emailInput - EmailInput - this is the object that contains the email input
     * values.
     */
    appendEmailBody(item: Select, emailInput: EmailInput): void;
    /**
     * Set the focus key of the email input to the key.
     * @param {EmailInput} emailInput - EmailInput - This is the email input object that you created in
     * the previous step.
     * @param {string} key - The key of the input.
     */
    setFocusKey(emailInput: EmailInput, key: string): void;
    /**
     * If the type is an action, set the node list to the actions, otherwise if the type is an event, set
     * the node list to the trigger events if there is only one event group and no children, otherwise
     * set the node list to the events
     * @param {NodeTypes} type - NodeTypes
     */
    openPopup(type: NodeTypes): void;
    /**
     * `onNodeAdd` is a function that takes in a node, a group type, a group id, and an id, and then
     * emits an event with a node and a new node
     * @param node - The node that was added.
     * @param {string} groupType - string - The type of group that the node is being added to.
     * @param {string} groupId - The id of the group that the node is being added to.
     * @param {string} [id] - The id of the node.
     */
    onNodeAdd(node: WorkflowNode<E>, groupType: string, groupId: string, id?: string): void;
    /**
     * It removes the node at the given index from the group
     * @param {number} index - The index of the node that was removed.
     */
    onNodeRemove(index: number): void;
    /**
     * It takes in an element, an input, and a popper, and returns a function that takes in a value, and
     * if that value is defined, it adds the value to the element, and hides the popper
     * @param element - NodeWithInput<E>
     * @param {WorkflowPrompt} input - WorkflowPrompt - this is the input object that was clicked on
     * @param {NgxPopperjsContentComponent} popper - NgxPopperjsContentComponent
     * @returns A function that takes a value and returns a function that takes a value and emits an event
     */
    createCallback(element: NodeWithInput<E>, input: WorkflowPrompt, popper: NgxPopperjsContentComponent): (value?: AllowedValues | undefined) => void;
    /**
     * It hides the previous popper and shows the current popper.
     * @param {MouseEvent} event - MouseEvent - The event that triggered the popper to show.
     * @param {NgxPopperjsContentComponent} popper - NgxPopperjsContentComponent - this is the popper
     * component that you want to show/hide.
     */
    onPoperClick(event: MouseEvent, popper: NgxPopperjsContentComponent): void;
    /**
     * shows custom tooltip
     * @param {MouseEvent} e - event object
     * @param element - NodeWithInput<E>
     * @param {WorkflowPrompt} input - WorkflowPrompt - this is the input object that was clicked on
     */
    showTooltip(e: MouseEvent, element: NodeWithInput<E>, input: WorkflowPrompt): void;
    /**
     * hides custom tooltip
     */
    hideTooltip(): void;
    /**
     * It returns a function that hides the previous popper
     * @returns A function that calls the hide method on the previous popper reference.
     */
    hidePopper(): () => void;
    /**
     * It takes in a node, an input, a value, and a boolean, and then it changes the state of the node
     * based on the input and value
     * @param element - NodeWithInput<E> - The element that is being changed.
     * @param {WorkflowPrompt} input - WorkflowPrompt - this is the input that was changed
     * @param {AllowedValues | AllowedValuesMap} value - AllowedValues | AllowedValuesMap,
     * @param [select=false] - boolean - This is a flag that tells the function whether the input is a
     * select input or not.
     */
    addValue(element: NodeWithInput<E>, input: WorkflowPrompt, value: AllowedValues | AllowedValuesMap, select?: boolean): void;
    onSelectAll(list: any): void;
    onClearAll(): void;
    getLibraryValue(node: BpmnNode, $event: any, type: string, metaObj: RecordOfAnyType): any;
    handleMouseDown(event: MouseEvent): void;
    handleMouseUp(): void;
    handleMouseLeave(event: MouseEvent): void;
    handleDocumentClick(event: MouseEvent): void;
    /**
     * It removes all the inputs that come after the current input
     * @param element - NodeWithInput<E>
     * @param {WorkflowPrompt} input - WorkflowPrompt - this is the input that was just changed
     */
    private handleSubsequentInputs;
    static ɵfac: i0.ɵɵFactoryDeclaration<GroupComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<GroupComponent<any>, "workflow-group", never, { "group": "group"; "isLast": "isLast"; "isFirst": "isFirst"; "eventGroups": "eventGroups"; "nodeType": "nodeType"; "popupTemplate": "popupTemplate"; "templateMap": "templateMap"; "allColumns": "allColumns"; }, { "remove": "remove"; "add": "add"; "eventAdded": "eventAdded"; "eventRemoved": "eventRemoved"; "actionAdded": "actionAdded"; "itemChanged": "itemChanged"; }, never, never>;
}
