import { AfterViewInit, Injector, OnChanges, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
import { LoadMfeOptions } from '../helpers';
import { NgxMfeOptions } from '../interfaces';
import { DynamicComponentBinding, RemoteComponentLoader, RemoteComponentsCache } from '../services';
import { MfeOutletInputs, MfeOutletOutputs } from '../types';
import * as i0 from "@angular/core";
/**
 * Micro-frontend directive for plugin-based approach.
 * -------------
 *
 * This directive give you to load micro-frontend inside in HTML template.
 *
 * @example Loads remote component and show as embed view or as a plugin.
 * ```html
 * <!-- Loads EntryComponent that declared in EntryModule from dashboard micro-frontend app. -->
 * <ng-container *mfeOutlet="
 *    'dashboard';
 *    module: 'EntryModule';
 *    component: 'EntryComponent';
 * ">
 * </ng-container>
 *
 * <!-- Or you can use ng-template, next example works same as previous example -->
 * <ng-template
 *    mfeOutlet="dashboard"
 *    mfeOutletModule="EntryModule"
 *    mfeOutletComponent="EntryComponent"
 * >
 * </ng-template>
 * ```
 *
 * @example Loads standalone remote component. Standalone component - it is a component that does not depend on anything and does not need dependencies from other modules.
 * ```html
 * <!-- You can load a standalone component without declaring a module in the mfeOutletModule prop. -->
 * <ng-template
 *    mfeOutlet="dashboard"
 *    mfeOutletComponent="EntryComponent"
 * >
 * </ng-template>
 * ```
 *
 * @example You can sets Inputs and sets handlers for Output events of the Remote component.
 * ```html
 * <ng-container *mfeOutlet="
 *    'dashboard';
 *    module: 'EntryModule';
 *    component: 'EntryComponent';
 *    inputs: { text: text$ | async };
 *    outputs: { click: onClick }
 * ">
 * </ng-container>
 *```
 *
 * @example Loads remote component and sets custom loader, same approach for fallback view.
 * ```html
 * <ng-template
 *    mfeOutlet="dashboard"
 *    mfeOutletModule="EntryModule"
 *    mfeOutletComponent="EntryComponent"
 *    [mfeOutletLoader]="loaderMfe"
 *    [mfeOutletLoaderDelay]="2000"
 * >
 * </ng-template>
 *
 * <!-- You can specify simple HTML content or declare another MFE component, like in the example below. -->
 * <ng-template #loaderMfe>
 *    <!-- For loader Mfe you should set mfeOutletLoader to undefined, and mfeOutletLoaderDelay to 0. For better UX. -->
 *    <ng-template
 *      mfeOutlet="loaders"
 *      mfeOutletModule="SpinnerModule"
 *      mfeOutletComponent="SpinnerComponent"
 *      [mfeOutletLoader]="undefined"
 *      [mfeOutletLoaderDelay]="0"
 *    >
 *    </ng-template>
 * </ng-template>
 *
 * <!-- Simple HTML content. -->
 * <ng-template #loader>
 *    <div>loading...</div>
 * </ng-template>
 * ```
 */
export declare class MfeOutletDirective implements OnChanges, AfterViewInit, OnDestroy {
    private readonly _vcr;
    private readonly _injector;
    private readonly _remoteComponentLoader;
    private readonly _remoteComponentCache;
    private readonly _dynamicBinding;
    private readonly _options;
    /**
     * Sets the Remote app name.
     */
    mfeApp?: string;
    /**
     * Sets the Remote compoennt.
     */
    mfeComponent?: string;
    /**
     * Sets the Remote module where declared Remote component (```mfeOutletComponent```)
     */
    mfeModule?: string;
    /**
     * A map of Inputs for a micro-frontend component.
     */
    inputs?: MfeOutletInputs;
    /**
     * A map of Outputs for a micro-frontend component.
     */
    outputs?: MfeOutletOutputs;
    /**
     * Custom injector for micro-frontend component.
     * @default current injector
     */
    injector?: Injector;
    /**
     * MFE RemoteComponent or TemplateRef.
     * Displayed when loading the micro-frontend.
     *
     * **Overrides the loader specified in the global library settings.**
     * @default options.loader
     */
    set loader(value: TemplateRef<unknown> | undefined);
    /**
     * The delay between displaying the contents of the bootloader and the micro-frontend .
     *
     * This is to avoid flickering when the micro-frontend loads very quickly.
     *
     * @default options.delay, if not set, then 0
     */
    loaderDelay: number;
    /**
     * MFE RemoteComponent or TemplateRef.
     * Displayed when loaded or compiled a micro-frontend with an error.
     *
     * **Overrides fallback the specified in the global library settings.**
     * @default options.fallback
     */
    set fallback(value: TemplateRef<unknown> | undefined);
    /**
     * Custom options for loading Mfe.
     */
    options?: LoadMfeOptions;
    private _loader?;
    private _fallback?;
    private _mfeComponentRef?;
    private _loaderComponentRef?;
    private _fallbackComponentRef?;
    /**
     * Remote component object.
     */
    private get _remoteComponent();
    constructor(_vcr: ViewContainerRef, _injector: Injector, _remoteComponentLoader: RemoteComponentLoader, _remoteComponentCache: RemoteComponentsCache, _dynamicBinding: DynamicComponentBinding, _options: NgxMfeOptions);
    ngOnChanges(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /**
     * Transfer MfeOutletInputs to micro-frontend component.
     *
     * Used when changing input "inputs" of this directive.
     * @internal
     */
    protected transferInputs(): void;
    /**
     * Render micro-frontend component.
     *
     * While loading bundle of micro-frontend showing loader.
     * If error occur then showing fallback.
     *
     * Used when changing input "mfe" of this directive.
     * @internal
     */
    protected renderMfe(): Promise<void>;
    /**
     * Shows micro-frontend component.
     * @internal
     */
    private _showMfe;
    /**
     * Shows loader content.
     * @internal
     */
    private _showLoader;
    /**
     * Shows fallback content.
     * @internal
     */
    private _showFallback;
    /**
     * Shows MFE Component or TemlateRef.
     * @param content MFE (Remote component) or TemlateRef.
     * @param options Custom options for MfeComponentFactoryResolver.
     * @internal
     */
    private _createView;
    /**
     * Create view for modular remote component.
     * @param remoteComponent MFE remote component
     * @param options (Optional) object of options.
     */
    private _createRemoteComponent;
    /**
     * Create view for standalone remote component.
     * @param remoteComponent MFE remote component
     * @param options (Optional) object of options.
     */
    private _createStandaloneRemoteComponent;
    /**
     * Binding the initial data of the micro-frontend.
     * @internal
     */
    private _bindMfeData;
    /**
     * Destroy all displayed components and clear view container ref.
     * @internal
     */
    private _clearView;
    static ɵfac: i0.ɵɵFactoryDeclaration<MfeOutletDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MfeOutletDirective, "[mfeOutlet]", ["mfeOutlet"], { "mfeApp": { "alias": "mfeOutlet"; "required": false; }; "mfeComponent": { "alias": "mfeOutletComponent"; "required": false; }; "mfeModule": { "alias": "mfeOutletModule"; "required": false; }; "inputs": { "alias": "mfeOutletInputs"; "required": false; }; "outputs": { "alias": "mfeOutletOutputs"; "required": false; }; "injector": { "alias": "mfeOutletInjector"; "required": false; }; "loader": { "alias": "mfeOutletLoader"; "required": false; }; "loaderDelay": { "alias": "mfeOutletLoaderDelay"; "required": false; }; "fallback": { "alias": "mfeOutletFallback"; "required": false; }; "options": { "alias": "mfeOutletOptions"; "required": false; }; }, {}, never, never, false, never>;
}
