import { Signal } from '@angular/core'; import { Observable } from 'rxjs'; export type DatasetTotalMode = 'exact' | 'estimated' | 'unavailable'; export interface DatasetPageInfo { limit: number; hasMore: boolean; nextCursor?: string; } export interface DatasetSummary { total?: number; totalMode?: DatasetTotalMode; } export interface DatasetPage { items: T[]; pageInfo: DatasetPageInfo; summary?: DatasetSummary; operationId?: string; } export interface DatasetLoadParams { limit: number; cursor?: string; refresh: boolean; } export interface DatasetState { items: T[]; limit: number; nextCursor?: string; hasMore: boolean; loading: boolean; loadingMore: boolean; error?: unknown; total?: number; totalMode: DatasetTotalMode; operationId?: string; } export interface DatasetController { state: Signal>; items: Signal; loading: Signal; loadingMore: Signal; error: Signal; hasMore: Signal; nextCursor: Signal; total: Signal; totalMode: Signal; operationId: Signal; loadInitial(): Promise; loadMore(): Promise; refresh(): Promise; reset(): void; setItems(items: T[]): void; updateItem(predicate: (item: T) => boolean, updates: Partial): void; removeItem(predicate: (item: T) => boolean): void; prependItems(items: T[]): void; appendItems(items: T[]): void; } export interface DatasetControllerConfig { limit?: number; initialItems?: T[]; loadFn: (params: DatasetLoadParams) => Observable> | Promise>; } export interface LegacyCursorDatasetPage { rows?: T[]; items?: T[]; nextCursor?: string; total?: number; operationId?: string; } export declare function createInitialDatasetState(limit: number, initialItems?: T[]): DatasetState; export declare function datasetPageFromLegacyCursor(response: LegacyCursorDatasetPage, limit: number): DatasetPage;