import { IdDatabase, ObjectWithId } from './commons.js';
import { Entity } from './entity.js';
export declare abstract class EntityList<P extends Entity<any>, T extends ObjectWithId> extends Entity<P> {
    $key: string;
    items: T[];
    constructor($owner: P, $key: string, specs: any);
    abstract get $entityType(): string;
    abstract $idDatabase: IdDatabase;
    abstract create(spec: any): T;
    toJSON(): {
        items: T[];
    };
    get $path(): string;
    [Symbol.iterator](): IterableIterator<T>;
    get length(): number;
    indexOf(item: T): number;
    get first(): T | null;
    get last(): T | null;
    get(index: number): T | null;
    find(predicate: (item: T, index: number) => boolean): T | null;
    filter(predicate: (item: T, index: number) => boolean): T[];
    map<K>(fn: (item: T, index: number) => K): K[];
    previousSiblings(item: T): IterableIterator<T>;
    nextSiblings(item: T): IterableIterator<T>;
    previousSibling(item: T): T | null;
    nextSibling(item: T): T | null;
    insert(spec: any, index?: number): T;
    removeAt(index: number): void;
    remove(item: T): void;
    removeWhere(predicate: (item: T, index: number) => boolean): void;
    replace(item: T, newSpec: any): T;
    move(item: T, newIndex: number): void;
    protected unregisterIds(item: T): void;
    protected collectIds(obj: any): Set<string>;
}
//# sourceMappingURL=list.d.ts.map