import { Signal, TemplateRef, Type } from '@angular/core'; import { Observable } from 'rxjs'; /** * Nombres de templates de skeleton disponibles. */ export type SkeletonTemplateName = 'list' | 'list-avatar' | 'grid' | 'grid-cards' | 'form' | 'form-compact' | 'profile' | 'profile-full' | 'detail' | 'table'; /** * Configuracion para un skeleton template. */ export interface SkeletonTemplateConfig { /** Numero de items skeleton a mostrar */ count?: number; /** Variante del layout */ variant?: string; /** Gap entre items (valor CSS) */ gap?: string; /** Ancho personalizado */ width?: string; /** Animacion habilitada */ animated?: boolean; /** Clases CSS adicionales */ cssClass?: string; /** Numero de columnas (para grid/table) */ columns?: number; /** Numero de filas (para table) */ rows?: number; /** Numero de secciones (para detail) */ sections?: number; } /** * Fuente de estado de carga - puede ser Signal, Observable o Promise. */ export type LoadingSource = Signal | Observable | Promise | boolean; /** * Configuracion para la directiva valSkeleton. */ export interface SkeletonDirectiveConfig { /** Mostrar skeleton cuando esto sea truthy */ when: LoadingSource; /** Nombre del template o componente a usar */ template?: SkeletonTemplateName | string; /** Configuracion del template */ config?: SkeletonTemplateConfig; /** Delay antes de mostrar skeleton (ms) - previene flash */ delay?: number; /** Tiempo minimo de visualizacion (ms) - previene parpadeo */ minTime?: number; } /** * Configuracion para la directiva valLoading. */ export interface LoadingDirectiveConfig { /** Fuente de estado de carga */ loading: LoadingSource; /** Template de skeleton a mostrar durante carga */ skeleton?: SkeletonTemplateName | string; /** Configuracion del skeleton */ skeletonConfig?: SkeletonTemplateConfig; /** Template ref personalizado para skeleton */ skeletonTemplate?: TemplateRef; /** Mostrar spinner en lugar de skeleton */ spinner?: boolean; /** Delay antes de mostrar estado de carga (ms) */ delay?: number; /** Tiempo minimo de carga (ms) */ minTime?: number; } /** * Template de skeleton registrado. */ export interface RegisteredSkeletonTemplate { name: string; component: Type; defaultConfig?: SkeletonTemplateConfig; } /** * Configuracion para provideValtechSkeleton(). */ export interface SkeletonConfig { /** Animacion habilitada por defecto */ animated?: boolean; /** Delay global antes de mostrar skeletons */ defaultDelay?: number; /** Tiempo minimo de visualizacion global */ defaultMinTime?: number; /** Templates de skeleton personalizados a registrar */ templates?: RegisteredSkeletonTemplate[]; /** Template por defecto para listas */ defaultListTemplate?: SkeletonTemplateName; /** Template por defecto para grids */ defaultGridTemplate?: SkeletonTemplateName; } /** * Configuracion por defecto para el sistema de skeletons. */ export declare const DEFAULT_SKELETON_CONFIG: SkeletonConfig; /** * Contexto para templates de skeleton en directivas. */ export interface SkeletonTemplateContext { /** Configuracion del skeleton */ config: SkeletonTemplateConfig; /** Estado de animacion */ animated: boolean; } /** * Tipo base para componentes de skeleton template. */ export interface SkeletonTemplateComponent { config: SkeletonTemplateConfig; }