import { ImmutableAugmentedPartialRegularItem, ImmutableAugmentedItem, ImmutableRegularItem, Item, ItemsRemovedPayload } from '../stores/items-store/interfaces';
import { Subject } from 'rxjs';
import { ItemsSelectionChangedPayload } from './interfaces';
import { ItemsStore } from '../stores/items-store/items-store';
import { Paginator } from '../paginator/paginator';
/**
 * Represents a selector.
 */
export declare class Selector<T extends Item<T>> {
    protected readonly getAllItems: ItemsStore<T>['getMutableItems'];
    protected readonly getPaginatedItems: Paginator<T>['getItems'];
    protected readonly findOneIndexForEach: ItemsStore<T>['findOneIndexForEach'];
    protected readonly $itemsRemoved: Subject<ItemsRemovedPayload<T>>;
    protected _selectedUuids: number[];
    readonly $itemsSelectionChanged: Subject<ItemsSelectionChangedPayload<T>>;
    constructor(getAllItems: ItemsStore<T>['getMutableItems'], getPaginatedItems: Paginator<T>['getItems'], findOneIndexForEach: ItemsStore<T>['findOneIndexForEach'], $itemsRemoved: Subject<ItemsRemovedPayload<T>>);
    /**
     * Returns the number of selected items.
     */
    getNbOfSelectedItems(): number;
    getNbOfUnselectedItems(): number;
    getNbOfSelectedPaginatedItems(): number;
    getNbOfUnselectedPaginatedItems(): number;
    /**
     * Returns the number of selected items in the given items.
     */
    getNbOfSelectedItemsIn(items: Readonly<(ImmutableAugmentedPartialRegularItem<T> | number | undefined)[]>): number;
    getSelectedItems(): ImmutableAugmentedItem<T>[];
    getUnselectedItems(): ImmutableAugmentedItem<T>[];
    getSelectedItemUuids(): number[];
    getUnselectedItemUuids(): number[];
    getSelectedPaginatedItems(): ImmutableAugmentedItem<T>[];
    getUnselectedPaginatedItems(): ImmutableAugmentedItem<T>[];
    /**
     * Selects or deselects an item.
     */
    select(item: ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | ImmutableAugmentedPartialRegularItem<T> | number | undefined, state: boolean | 'toggle'): void;
    /**
     * Selects or deselects multiple items.
     */
    selectMultiple(items: Readonly<(ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | ImmutableAugmentedPartialRegularItem<T> | number | undefined)[]>, states: (boolean | 'toggle')[] | (boolean | 'toggle')): void;
    /**
     * Verifies that the selected items are still valid after items have been removed.
     */
    protected verifySelectedItemsOnRemoval({ removedItems }: ItemsRemovedPayload<T>): void;
    /**
     * Selects or deselects an item.
     */
    protected selectInternal(item: ImmutableAugmentedItem<T> | ImmutableRegularItem<T> | ImmutableAugmentedPartialRegularItem<T> | number | undefined, state: boolean | 'toggle'): number;
}
