import { ComputedRef, Raw, Ref } from 'vue';
import { TrackedInstance } from './tracked-instance';
export type CollectionItem<Item, Meta = undefined> = Raw<{
    instance: TrackedInstance<Item>;
    meta: Meta;
    isRemoved: Ref<boolean>;
    isNew: Ref<boolean>;
    remove: (isHardRemoved?: boolean) => void;
}>;
export interface Collection<Item, Meta = undefined> {
    items: Ref<CollectionItem<Item, Meta>[]>;
    isDirty: ComputedRef<boolean>;
    add: (item: Item, afterIndex?: number) => CollectionItem<Item, Meta>;
    remove: (index: number, isHardRemove?: boolean) => void;
    loadData: (items: Item[]) => void;
    reset: () => void;
}
export declare const useCollection: <Item = any, Meta = undefined>(createItemMeta?: (instance: TrackedInstance<Item>) => Meta) => Collection<Item, Meta>;
