import { IStorageBase } from '../../core';
export interface UseStorageSubscribeOptions<R> {
    /**
     * Функция сравнения предыдущего и нового среза. Если возвращает `true`,
     * снапшот не меняется по ссылке и компонент НЕ ререндерится — даже если
     * остальное состояние стора изменилось. Полезно, когда селектор возвращает
     * объект/массив (новая ссылка на каждый тик) или когда нужно ререндерить
     * только при изменении конкретного среза.
     */
    equals?: (a: R, b: R) => boolean;
}
/**
 * Хук для подписки на изменения в хранилище.
 * Использует useSyncExternalStore для корректной работы в Concurrent Mode.
 *
 * Принимает IStorageBase (общий интерфейс для sync и async хранилищ),
 * так как подписки одинаковы для всех типов.
 *
 * @template S - Тип состояния хранилища
 * @template R - Тип возвращаемого значения
 * @param storage - Экземпляр хранилища или null (до инициализации)
 * @param selector - Функция-селектор для выбора данных
 * @param options - Опции: `equals` для мемоизации снапшота (см. {@link UseStorageSubscribeOptions})
 * @returns Значение из хранилища
 */
export declare const useStorageSubscribe: <S extends Record<string, any>, R = any>(storage: IStorageBase<S> | null, selector: (state: S) => R, options?: UseStorageSubscribeOptions<R>) => R | undefined;
