import { Signal, Type } from '@angular/core';
import * as i0 from "@angular/core";
/**
 * Abstract structural directive to replace content with loading indicator.
 *
 * Concrete classes must implement the abstract properties `isSwapped` and `swappedStateComponent`.
 *
 * The isSwapped property must be a signal that emits a boolean value. Most commonly this will be the
 * input mapped to the selector for the directive.
 *
 * The swappedStateComponent property must be a reference to the component class that should be rendered
 * when isSwapped is true.
 *
 * The componentInputs property must be a signal that emits an object with the inputs that should be passed
 * to the swappedStateComponent when it is rendered. Implementation is optional within concrete classes and
 * would normally be a computed signal that maps the directive's inputs to the component's inputs.
 *
 * Example concrete class:
 *
 * ```typescript
 *     @Directive({
 *         selector: '[nxLoadingSpinner]',
 *         standalone: true,
 *     })
 *     export class NxLoadingSpinnerDirective extends NxLoadingDirective {
 *         isSwapped = input(false, { transform: booleanAttribute, alias: 'nxLoadingSpinner });
 *         swappedStateComponent = signal(NxSpinnerComponent);
 *     }
 * ```
 *
 * Example usage (note that the directive is used as a structural directive):
 *
 * ```html
 * <component-or-element *nxLoadingSpinner="isLoading"></component-or-element>
 * ```
 */
export declare abstract class NxSwappedAbstractBaseDirective {
    /**
     * Signal that emits a boolean value to indicate whether the loading state should be displayed.
     *
     * Most commonly this will be the input mapped to the selector for the directive.
     */
    protected abstract isSwapped: Signal<boolean>;
    /**
     * Reference to the component class that will be dynamically initialized and used as the loader.
     */
    protected abstract swappedStateComponent: Signal<Type<unknown>>;
    /**
     * Signal that emits an object with the inputs that should be passed to the swappedStateComponent
     */
    protected componentInputs: Signal<Record<string, unknown>>;
    /**
     * Handles the rendering of the view based on the isSwapped signal.
     *
     * When the isSwapped signal emits true the children of the current element are hidden and the
     * loader is rendered. This prevents any layout shifts that would occur if the loader was rendered.
     *
     * When the isSwapped signal emits false the loader is removed and the children are shown again.
     *
     * The view is re-rendered whenever the isSwapped signal emits a new value so applied styles used
     * by the directive are not persisted on the host element.
     */
    protected renderView: import("@angular/core").EffectRef;
    private _templateRef;
    private _viewContainer;
    private _renderer;
    private _environmentInjector;
    private _injector;
    static ɵfac: i0.ɵɵFactoryDeclaration<NxSwappedAbstractBaseDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NxSwappedAbstractBaseDirective, never, never, {}, {}, never, never, true, never>;
}
