import { HttpErrorResponse } from '@angular/common/http';
import { Signal } from '@angular/core';
import { Params } from '@angular/router';
import { Observable } from 'rxjs';
import { WatchAPIResponse } from '../api/public-api';
import { KubernetesResource, KubernetesResourceList, Status } from '../core/public-api';
export declare class K8SResourcePagedList<R extends KubernetesResource = KubernetesResource, P = unknown> {
    private readonly config;
    private readonly reload$$;
    private readonly addedUid;
    private readonly deletedUid;
    params$: Observable<ListFetchParams<P>>;
    loadState$: Observable<LoadState<R>>;
    loading$: Observable<boolean>;
    items$: Observable<R[]>;
    totalItems$: Observable<number>;
    loadError$: Observable<Status | HttpErrorResponse>;
    $loading: Signal<boolean>;
    $items: Signal<R[]>;
    $totalItems: Signal<number>;
    $loadError: Signal<Status | HttpErrorResponse>;
    constructor(config: PagedListConfig<R, P>);
    reload(): void;
    private sourceLoadState;
    private loadStateWithPolling;
    private loadStateWithWatcher;
}
export interface PagedListConfig<R, P> {
    params: Signal<ListFetchParams<P>> | Observable<ListFetchParams<P>>;
    fetcher: (listParams: FetchSeed, extraParams: P) => Observable<KubernetesResourceList<R>>;
    watcher?: (listParams: FetchSeed, extraParams: P) => Observable<WatchAPIResponse<R>>;
    polling?: number;
}
export interface ListFetchParams<P = never> {
    pageIndex?: number | string;
    pageSize?: number | string;
    sortField?: string;
    sortOrder?: 'asc' | 'desc';
    keyword?: string;
    fieldSelector?: string;
    labelSelector?: string;
    extra?: P;
}
export interface FetchSeed extends Record<string, string> {
    limit?: string;
    continue?: string;
    fieldSelector?: string;
}
interface LoadState<R> {
    items: R[];
    totalItems: number;
    loading: boolean;
    loadSuccess: boolean;
    loadError?: HttpErrorResponse | Status;
}
export declare function extractPagedListParams<P>(defaultParams?: ListFetchParams, extraParams?: (queryParams: Params) => P): Readonly<{
    stream: () => Observable<ListFetchParams<P>>;
    signal: () => Signal<ListFetchParams<P>>;
}>;
export declare function queryListParams(): (queryParams: Params) => void;
export {};
