import { Injector } from '@angular/core';
import { WorkflowElement } from '../../classes/element';
import { ElementService } from '../../classes/services';
import { StatementNode } from '../../classes/statement';
import { RecordOfAnyType } from '../../types';
import * as i0 from "@angular/core";
export declare class BpmnElementService<E> implements ElementService<E> {
    private readonly elements;
    private readonly injector;
    constructor(elements: WorkflowElement<E>[], injector: Injector);
    /**
     * "Create an instance of the given element class, and if it's a valid builder, then create the
     * element."
     *
     * @param element - The constructor of the element you want to create.
     * @param node - The node that the element is being created for.
     * @param {RecordOfAnyType} [attributes] - A map of attributes that are passed to the builder.
     * @returns A new instance of the element.
     */
    createElement(element: WorkflowElement<E>, node: StatementNode<E>, attributes?: RecordOfAnyType): any;
    /**
     * "Create an element by name."
     *
     * The first parameter is the name of the element to create. The second parameter is the node that the
     * element will be created from. The third parameter is a set of attributes that will be passed to the
     * element
     * @param {string} name - The name of the element to create.
     * @param node - The node that the element is being created for.
     * @param {RecordOfAnyType} [attributes] - A dictionary of attributes to be passed to the builder.
     * @returns A new instance of the class that is being created.
     */
    createElementByName(name: string, node: StatementNode<E>, attributes?: RecordOfAnyType): E;
    cloneInstance(element: WorkflowElement<E>): any;
    /**
     * It takes a string name and returns an instance of the element class that has that name
     * @param {string} element - the name of the element to create
     * @returns An instance of the class that was passed in.
     */
    createInstanceByName(element: string): any;
    static ɵfac: i0.ɵɵFactoryDeclaration<BpmnElementService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<BpmnElementService<any>>;
}
