import { S as SelectorAPI } from './selector.interface-CA5y-kD_.js';
import { j as IStorage } from './storage.interface-2HKvqdAJ.js';
import { ComponentType } from 'react';
import { Observable } from 'rxjs';
import { b as SynapseStoreWithEffects, a as SynapseStoreWithDispatcher, S as SynapseStoreBasic } from './createSynapse-CzeX0ONj.js';
import './dispatcher.module-DjMloBXe.js';

interface UseSelectorOptions<T> {
    /** Начальное значение до загрузки данных из селектора */
    initialValue?: T;
    /** Функция сравнения для предотвращения лишних ререндеров */
    equals?: (a: T, b: T) => boolean;
    /** Включать ли статус загрузки в возвращаемый результат */
    withLoading?: boolean;
}
/**
 * Хук для использования селекторов в компонентах React.
 * Обеспечивает согласованность значений между всеми экземплярами хука.
 */
declare function useSelector<T>(selector: SelectorAPI<T>): T | undefined;
declare function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & {
    withLoading?: true;
}): {
    data: T | undefined;
    isLoading: boolean;
};

/**
 * Хук для подписки на изменения в хранилище
 *
 * @template S - Тип состояния хранилища
 * @template R - Тип возвращаемого значения
 * @param storage - Экземпляр хранилища
 * @param selector - Функция-селектор для выбора данных
 * @returns Значение из хранилища
 */
declare const useStorageSubscribe: <S extends Record<string, any>, R = any>(storage: IStorage<S>, selector: (state: S) => R) => R | undefined;

interface Options<TStore extends Record<string, any>> {
    loadingComponent?: any;
    mergeFn?: (target: TStore, source: Record<string, any>) => void;
}
/**
 * Перегрузки для createSynapseCtx в зависимости от типа хранилища
 */
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>, options?: Options<TStore>): {
    contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
        contextProps?: PublicContextProps;
    }>;
    useSynapseStorage: () => TStorage;
    useSynapseSelectors: () => TSelectors;
    useSynapseActions: () => TActions;
    useSynapseState$: () => Observable<TStore>;
    cleanupSynapse: () => Promise<void>;
};
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>, options?: Options<TStore>): {
    contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
        contextProps?: PublicContextProps;
    }>;
    useSynapseStorage: () => TStorage;
    useSynapseSelectors: () => TSelectors;
    useSynapseActions: () => TActions;
    cleanupSynapse: () => Promise<void>;
};
declare function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors>(synapseStorePromise: Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>> | SynapseStoreBasic<TStore, TStorage, TSelectors>, options?: Options<TStore>): {
    contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) => ComponentType<SelfComponentProps & {
        contextProps?: PublicContextProps;
    }>;
    useSynapseStorage: () => TStorage;
    useSynapseSelectors: () => TSelectors;
    cleanupSynapse: () => Promise<void>;
};

export { createSynapseCtx, useSelector, useStorageSubscribe };
