import { AugmentedItem, DynamicImmutableAugmentedItem, ImmutableAugmentedItem, ImmutableAugmentedPartialRegularItem, ImmutablePartialRegularItem, ImmutableRegularItem, ItemsAddedPayload, ItemsRemovedPayload, ItemsUpdatedPayload, Item, StoreLoadingStateChangedPayload } from './interfaces';
import { FieldsStore } from '../fields-store/fields-store';
import { Subject } from 'rxjs';
/**
 * Manages the items with methods for adding, removing, and updating them.
 */
export declare class ItemsStore<T extends Item<T>> {
    protected readonly getFieldsAsArray: FieldsStore<T>['getFieldsAsArray'];
    protected allItems: AugmentedItem<T>[];
    protected _uuidCounter: number;
    protected _loading: boolean;
    readonly $loadingStateChanged: Subject<StoreLoadingStateChangedPayload<T>>;
    readonly $itemsAdded: Subject<ItemsAddedPayload<T>>;
    readonly $itemsRemoved: Subject<ItemsRemovedPayload<T>>;
    readonly $itemsUpdated: Subject<ItemsUpdatedPayload<T>>;
    constructor(getFieldsAsArray: FieldsStore<T>['getFieldsAsArray']);
    /**
     * Returns the total number of items in the store.
     */
    getNbOfItems(): number;
    /**
     * Returns the loading state.
     */
    getLoadingState(): boolean;
    getItems(strictlyTyped?: true): ImmutableAugmentedItem<T>[];
    getItems(strictlyTyped?: false): DynamicImmutableAugmentedItem[];
    getMutableItems(): AugmentedItem<T>[];
    /**
     * Sets the loading state and triggers the corresponding event.
     */
    protected setLoading(state: boolean): void;
    /**
     * Initializes the store with an array of items.
     */
    initialize(items: Readonly<ImmutableRegularItem<T>[]>): void;
    /**
     * Adds new items to the store.
     */
    add(items: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T>)[]>): void;
    /**
     * Removes items from the store by UUID or item reference.
     */
    remove(itemsAndUuids: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | number | undefined)[]>): boolean[];
    /**
     * Updates items in the store using augmented data.
     */
    updateByInItemUuid(items: Readonly<ImmutableAugmentedPartialRegularItem<T>[]>): boolean[];
    /**
     * Updates items in the store by matching UUIDs.
     */
    updateByExternalUuids(items: Readonly<ImmutablePartialRegularItem<T>[]>, uuids: number[]): boolean[];
    /**
     * Updates items at specified indexes.
     */
    updateByIndex(items: Readonly<ImmutablePartialRegularItem<T>[]>, indexes: number[]): boolean[];
    /**
     * Finds and returns items matching the given UUIDs or item references.
     */
    findOneMatchingItemForEach(itemsAndUuids: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | number | undefined)[]>): (ImmutableAugmentedItem<T> | undefined)[];
    /**
     * Finds and returns the indexes of items matching the given UUIDs or item references.
     */
    findOneIndexForEach(itemsAndUuids: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | ImmutableAugmentedPartialRegularItem<T> | number | undefined)[]>): number[];
    /**
     * Finds and returns all the possible indexes of items matching the given UUIDs or item references.
     */
    findAllPossibleIndexesForEach(itemsAndUuids: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | ImmutableAugmentedPartialRegularItem<T> | number | undefined)[]>): number[][];
    /**
     * Generates a unique identifier (UUID) for items.
     */
    protected getNewUuid(): number;
}
