import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
import { I18nService } from '../../../services/i18n';
import { IonInfiniteScroll } from '@ionic/angular/standalone';
import { InfiniteListMetadata, InfiniteListState, LoadMoreEvent } from './types';
import { RefreshEvent, RefresherMetadata } from '../../molecules/refresher/types';
import * as i0 from "@angular/core";
/**
 * Componente wrapper para listas con infinite scroll.
 *
 * @example
 * <!-- Uso basico con data source -->
 * <val-infinite-list
 *   [props]="{
 *     dataSource: { loadFn: loadUsers, trackBy: trackByUserId },
 *     itemTemplate: userTemplate,
 *     pageSize: 20,
 *     threshold: '150px'
 *   }"
 * ></val-infinite-list>
 *
 * <ng-template #userTemplate let-user let-index="index">
 *   <val-card [props]="{ title: user.name, subtitle: user.email }">
 *     <p>{{ user.bio }}</p>
 *   </val-card>
 * </ng-template>
 *
 * @example
 * <!-- Con pull-to-refresh y estado vacio personalizado -->
 * <val-infinite-list
 *   [props]="{
 *     dataSource: { loadFn: loadMessages },
 *     itemTemplate: messageTemplate,
 *     direction: 'both',
 *     enableRefresh: true,
 *     emptyState: {
 *       icon: 'chatbubbles-outline',
 *       title: 'Sin mensajes',
 *       message: 'Inicia una conversacion'
 *     },
 *     skeleton: { template: 'list', count: 5 }
 *   }"
 *   (refresh)="onRefresh($event)"
 * ></val-infinite-list>
 */
export declare class InfiniteListComponent<T = unknown> implements OnInit, OnDestroy {
    private readonly skeletonService;
    private readonly cdr;
    protected readonly i18n: I18nService;
    infiniteScroll?: IonInfiniteScroll;
    /** Configuracion del componente */
    props: InfiniteListMetadata<T>;
    loadMore: EventEmitter<LoadMoreEvent>;
    refresh: EventEmitter<RefreshEvent>;
    stateChange: EventEmitter<InfiniteListState>;
    itemsChange: EventEmitter<T[]>;
    errorOccurred: EventEmitter<Error>;
    readonly items: import("@angular/core").WritableSignal<T[]>;
    readonly state: import("@angular/core").WritableSignal<InfiniteListState>;
    readonly hasMoreBottom: import("@angular/core").WritableSignal<boolean>;
    readonly hasMoreTop: import("@angular/core").WritableSignal<boolean>;
    readonly error: import("@angular/core").WritableSignal<Error>;
    readonly isInitialLoad: import("@angular/core").WritableSignal<boolean>;
    private currentPage;
    private currentCursor;
    /** Progreso de carga (0-1 si totalCount conocido) */
    readonly loadProgress: import("@angular/core").Signal<number>;
    /** Props combinados con defaults */
    get mergedProps(): InfiniteListMetadata<T>;
    /** Config del refresher */
    get refresherConfig(): RefresherMetadata;
    /** Componente de skeleton a usar */
    get skeletonComponent(): import("@angular/core").Type<unknown>;
    /** Inputs para el skeleton */
    get skeletonInputs(): {
        config: unknown;
    };
    /** Anuncio de estado para lectores de pantalla */
    readonly statusAnnouncement: import("@angular/core").Signal<string>;
    ngOnInit(): void;
    ngOnDestroy(): void;
    /** Funcion de tracking para ngFor */
    trackByFn(index: number, item: T): unknown;
    /** Si debe mostrar el scroll inferior */
    shouldShowBottomScroll(): boolean;
    /** Carga inicial de datos */
    loadInitial(): Promise<void>;
    /** Cargar mas items en la parte inferior */
    loadBottom(): Promise<void>;
    /** Cargar mas items en la parte superior */
    loadTop(): Promise<void>;
    /** Refresh - recargar desde cero */
    refreshList(): Promise<void>;
    /** Reintentar despues de error */
    retry(): Promise<void>;
    /** Reset completo */
    reset(): Promise<void>;
    /** Agregar items al inicio */
    prependItems(newItems: T[]): void;
    /** Agregar items al final */
    appendItems(newItems: T[]): void;
    /** Actualizar un item por indice */
    updateItem(index: number, item: T): void;
    /** Remover un item por indice */
    removeItem(index: number): void;
    /** Handler para evento de infinite scroll */
    onInfiniteScroll(event: CustomEvent): Promise<void>;
    /** Handler para evento de refresh */
    onRefreshTriggered(event: RefreshEvent): Promise<void>;
    private executeLoad;
    private handleError;
    static ɵfac: i0.ɵɵFactoryDeclaration<InfiniteListComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<InfiniteListComponent<any>, "val-infinite-list", never, { "props": { "alias": "props"; "required": false; }; }, { "loadMore": "loadMore"; "refresh": "refresh"; "stateChange": "stateChange"; "itemsChange": "itemsChange"; "errorOccurred": "errorOccurred"; }, never, never, true, never>;
}
