import type { SelectorAPI } from '../../core';
interface UseSelectorOptions<T> {
    /** Функция сравнения для предотвращения лишних ререндеров */
    equals?: (a: T, b: T) => boolean;
    /** Включать ли статус загрузки в возвращаемый результат */
    withLoading?: boolean;
}
/**
 * Хук для использования селекторов в компонентах React.
 * Использует useSyncExternalStore для корректной работы в Concurrent Mode.
 * Подписывается напрямую через selector.subscribe() — без глобального реестра.
 */
export declare function useSelector<T>(selector: SelectorAPI<T>): T;
export declare function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & {
    withLoading: true;
}): {
    data: T;
    isLoading: boolean;
};
export declare function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & {
    withLoading?: false;
}): T;
/**
 * Изоляция ре-рендеров для keyed-map стора (паттерн «equals»). Подписка идёт на
 * ВЕСЬ map (`selector`), но `equals` сравнивает только срез по `key` → компонент
 * ре-рендерится лишь когда меняется его `map[key]` по ссылке. Работает, т.к.
 * иммутабельные мутации по одному ключу не трогают ссылку чужих срезов.
 * Гранулярность живёт в месте вызова, а селекторы остаются плоскими (без фабрик
 * с `Map<key, selector>`).
 *
 * `fallback` ОБЯЗАН быть стабильной ссылкой (module-level константа), иначе
 * `?? fallback` будет давать новый объект каждый тик и рвать нижестоящие `useMemo`.
 */
export declare function useKeyedSliceSelector<V>(selector: SelectorAPI<Record<string, V>>, key: string, fallback: V): V;
export {};
