import { BaseSyncModel } from '../models/BaseSyncModel';
import type { ModelConfig } from '../types';
export interface MapItem {
    id: string;
}
export declare function createMapModel<T extends MapItem>(config: ModelConfig): new () => BaseSyncModel<Map<string, T>> & {
    create(item: Omit<T, 'id'> | T): string;
    update(id: string, partial: Partial<T>): void;
    delete(id: string): void;
    get(id: string): T | undefined;
    clear(): void;
    batchCreate(items: (Omit<T, 'id'> | T)[]): string[];
    batchUpdate(updates: Map<string, Partial<T>> | Array<{
        id: string;
    } & Partial<T>>): void;
    batchDelete(ids: string[]): void;
    all: T[];
    size: number;
    isEmpty: boolean;
    has(id: string): boolean;
    find(predicate: (item: T) => boolean): T[];
    findOne(predicate: (item: T) => boolean): T | undefined;
    filter(predicate: (item: T) => boolean): T[];
    map<R>(mapper: (item: T) => R): R[];
    reduce<R>(reducer: (acc: R, item: T) => R, initial: R): R;
    sort(compareFn: (a: T, b: T) => number): T[];
    getAll(): Map<string, T>;
    getValue(): Map<string, T>;
    setValue(value: Map<string, T>): void;
    subscribeToItem(id: string, callback: (item: T | undefined) => void): () => void;
    subscribeToSize(callback: (size: number) => void): () => void;
};
