import { TemplateRef, OnDestroy } from '@angular/core';
import { LoadingSource, SkeletonTemplateName } from '../types';
import * as i0 from "@angular/core";
/**
 * Directiva estructural simplificada para estados de carga.
 *
 * Soporta multiples fuentes de estado de carga:
 * - Angular Signal<boolean>
 * - RxJS Observable<boolean>
 * - Promise<any> (cargando hasta que se resuelve)
 * - boolean literal
 *
 * @example
 * <!-- Uso simple con signal -->
 * <ng-container *valLoading="isLoading(); skeleton: 'list'">
 *   <app-list [items]="items()"></app-list>
 * </ng-container>
 *
 * @example
 * <!-- Con configuracion -->
 * <ng-container *valLoading="loading$; skeleton: 'grid-cards'; count: 8">
 *   <app-grid [data]="data"></app-grid>
 * </ng-container>
 *
 * @example
 * <!-- Con template personalizado -->
 * <ng-container *valLoading="isLoading(); skeletonTpl: customSkeleton">
 *   <app-content></app-content>
 * </ng-container>
 * <ng-template #customSkeleton>
 *   <val-skeleton [props]="{ type: 'card' }"></val-skeleton>
 * </ng-template>
 */
export declare class LoadingDirective implements OnDestroy {
    private readonly templateRef;
    private readonly viewContainer;
    private readonly skeletonService;
    private readonly destroyRef;
    private readonly _loading;
    private hasContentView;
    private skeletonComponentRef;
    /** Template de skeleton a usar */
    skeleton: SkeletonTemplateName | string;
    /** Template personalizado para skeleton */
    skeletonTpl: TemplateRef<unknown> | null;
    /** Cantidad de items skeleton */
    count: number;
    /** Animacion habilitada */
    animated: boolean;
    /** Gap entre items */
    gap: string | undefined;
    /** Variante del template */
    variant: string | undefined;
    /** Mostrar spinner en lugar de skeleton */
    spinner: boolean;
    constructor();
    /**
     * Input principal - puede ser boolean, Signal, Observable o Promise.
     */
    set loading(source: LoadingSource);
    ngOnDestroy(): void;
    private resolveLoadingSource;
    private updateView;
    private showSkeleton;
    private showSkeletonTemplate;
    private showSpinner;
    private showFallback;
    private showContent;
    static ɵfac: i0.ɵɵFactoryDeclaration<LoadingDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<LoadingDirective, "[valLoading]", never, { "skeleton": { "alias": "valLoadingSkeleton"; "required": false; }; "skeletonTpl": { "alias": "valLoadingSkeletonTpl"; "required": false; }; "count": { "alias": "valLoadingCount"; "required": false; }; "animated": { "alias": "valLoadingAnimated"; "required": false; }; "gap": { "alias": "valLoadingGap"; "required": false; }; "variant": { "alias": "valLoadingVariant"; "required": false; }; "spinner": { "alias": "valLoadingSpinner"; "required": false; }; "loading": { "alias": "valLoading"; "required": false; }; }, {}, never, never, true, never>;
}
