import { Type } from '@angular/core';
import { SkeletonTemplateName, SkeletonTemplateConfig, RegisteredSkeletonTemplate, SkeletonConfig } from './types';
import * as i0 from "@angular/core";
/**
 * Servicio para gestionar templates de skeleton y estados de carga globales.
 *
 * @example
 * // En un componente
 * skeleton = inject(SkeletonService);
 *
 * // Registrar template personalizado
 * skeleton.registerTemplate('my-custom', MyCustomSkeletonComponent);
 *
 * // Obtener componente de template
 * const component = skeleton.getTemplate('list');
 *
 * // Gestionar estados de carga globales
 * skeleton.setLoadingState('dashboard', true);
 * const isDashboardLoading = skeleton.loadingState('dashboard');
 */
export declare class SkeletonService {
    private readonly _config;
    private readonly _templates;
    private readonly _loadingStates;
    private _initialized;
    /** Configuracion actual (solo lectura) */
    readonly config: import("@angular/core").Signal<SkeletonConfig>;
    /** Templates registrados (solo lectura) */
    readonly templates: import("@angular/core").Signal<Map<string, RegisteredSkeletonTemplate>>;
    /** Estado de carga global (cualquier estado registrado esta cargando) */
    readonly isAnyLoading: import("@angular/core").Signal<boolean>;
    /** Cantidad de templates registrados */
    readonly templateCount: import("@angular/core").Signal<number>;
    /**
     * Configura el servicio de skeleton.
     * Llamado por provideValtechSkeleton().
     */
    configure(config: SkeletonConfig): void;
    /**
     * Registra un template de skeleton personalizado.
     *
     * @param name Nombre unico del template
     * @param component Componente a usar
     * @param defaultConfig Configuracion por defecto opcional
     */
    registerTemplate(name: string, component: Type<unknown>, defaultConfig?: SkeletonTemplateConfig): void;
    /**
     * Obtiene un template de skeleton registrado.
     *
     * @param name Nombre del template
     * @returns Template registrado o undefined si no existe
     */
    getTemplate(name: SkeletonTemplateName | string): RegisteredSkeletonTemplate | undefined;
    /**
     * Verifica si un template esta registrado.
     *
     * @param name Nombre del template
     * @returns true si el template existe
     */
    hasTemplate(name: string): boolean;
    /**
     * Obtiene todos los nombres de templates registrados.
     *
     * @returns Array de nombres de templates
     */
    getTemplateNames(): string[];
    /**
     * Registra un estado de carga nombrado.
     * Util para indicadores de carga globales.
     *
     * @param key Identificador unico del estado
     * @param isLoading Estado de carga
     */
    setLoadingState(key: string, isLoading: boolean): void;
    /**
     * Obtiene el estado de carga para una clave especifica.
     *
     * @param key Identificador del estado
     * @returns Estado de carga actual
     */
    getLoadingState(key: string): boolean;
    /**
     * Crea un signal computado para un estado de carga especifico.
     *
     * @param key Identificador del estado
     * @returns Signal reactivo del estado de carga
     */
    loadingState(key: string): import("@angular/core").Signal<boolean>;
    /**
     * Obtiene todas las claves de estados de carga activos.
     *
     * @returns Array de claves con estado de carga activo
     */
    getActiveLoadingKeys(): string[];
    /**
     * Limpia todos los estados de carga.
     */
    clearLoadingStates(): void;
    /**
     * Limpia un estado de carga especifico.
     *
     * @param key Identificador del estado a limpiar
     */
    clearLoadingState(key: string): void;
    /**
     * Ejecuta una funcion async con tracking de estado de carga.
     *
     * @param key Identificador del estado
     * @param fn Funcion async a ejecutar
     * @returns Resultado de la funcion
     */
    withLoading<T>(key: string, fn: () => Promise<T>): Promise<T>;
    /**
     * Obtiene la configuracion de animacion por defecto.
     */
    get animated(): boolean;
    /**
     * Obtiene el delay por defecto.
     */
    get defaultDelay(): number;
    /**
     * Obtiene el tiempo minimo por defecto.
     */
    get defaultMinTime(): number;
    static ɵfac: i0.ɵɵFactoryDeclaration<SkeletonService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SkeletonService>;
}
