import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { ToggleSubject } from '@rxap/rxjs';
import { Method } from '@rxap/pattern';
import * as i0 from "@angular/core";
export interface MethodTemplateDirectiveContext<ReturnType = any> {
    $implicit: ReturnType;
}
export interface MethodTemplateDirectiveErrorContext {
    $implicit: Error;
    message: string;
}
export declare class MethodTemplateDirective<ReturnType = any, Parameters = any> implements OnInit, OnChanges {
    private readonly template;
    private readonly viewContainerRef;
    protected readonly cdr: ChangeDetectorRef;
    method: Method<ReturnType, Parameters>;
    parameters?: Parameters;
    errorTemplate?: TemplateRef<MethodTemplateDirectiveErrorContext>;
    loadingTemplate?: TemplateRef<void>;
    withoutParameters: boolean;
    immediately: boolean;
    executed$: EventEmitter<any>;
    failure$: EventEmitter<Error>;
    successful$: EventEmitter<ReturnType>;
    /**
     * true - a remote method call is in progress
     */
    executing$: ToggleSubject;
    embedded: EventEmitter<any>;
    constructor(template: TemplateRef<MethodTemplateDirectiveContext<ReturnType>>, viewContainerRef: ViewContainerRef, cdr: ChangeDetectorRef);
    static ngTemplateContextGuard<T>(dir: MethodTemplateDirective<T>, ctx: any): ctx is MethodTemplateDirectiveContext<T>;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnInit(): void;
    onConfirmed(): Promise<void>;
    execute(parameters?: Parameters | undefined): Promise<void>;
    setParameter<Key extends keyof Parameters>(parameterKey: Key, value: Parameters[Key]): void;
    updateParameters(parameters: Partial<Parameters>): void;
    protected executed(result: any): void;
    protected failure(error: Error): void;
    protected successful(result: ReturnType): void;
    protected renderErrorTemplate(error: Error): void;
    protected renderTemplate(result: ReturnType): void;
    private renderLoadingTemplate;
    static ɵfac: i0.ɵɵFactoryDeclaration<MethodTemplateDirective<any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MethodTemplateDirective<any, any>, "[rxapMethod]", ["rxapMethod"], { "method": { "alias": "rxapMethodCall"; "required": false; }; "parameters": { "alias": "rxapMethodParameters"; "required": false; }; "errorTemplate": { "alias": "rxapMethodError"; "required": false; }; "loadingTemplate": { "alias": "rxapMethodLoading"; "required": false; }; "withoutParameters": { "alias": "rxapMethodWithoutParameters"; "required": false; }; "immediately": { "alias": "immediately"; "required": false; }; }, { "executed$": "executed"; "failure$": "failure"; "successful$": "successful"; "executing$": "executing"; "embedded": "embedded"; }, never, never, true, never>;
}
