import { IAsyncStorage, IEventEmitter, ILogger, IStorage, ISyncStorage, StorageInitStatus, StorageType, UniversalStorageConfig } from '../../core';
export interface UseSynapseStorageOptions {
    /**
     * Автоматически инициализировать при монтировании
     */
    autoInitialize?: boolean;
    /**
     * Уничтожать storage при размонтировании
     */
    destroyOnUnmount?: boolean;
}
export type UseSynapseStorageReturn<S> = {
    storage: S;
    status: StorageInitStatus;
    initialize: () => Promise<void>;
    destroy: () => Promise<void>;
    isReady: true;
    isLoading: false;
    hasError: false;
} | {
    storage: null;
    status: StorageInitStatus;
    initialize: () => Promise<void>;
    destroy: () => Promise<void>;
    isReady: false;
    isLoading: boolean;
    hasError: boolean;
};
export declare function useCreateStorage<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
    type: 'memory';
}, options?: UseSynapseStorageOptions, eventEmitter?: IEventEmitter, logger?: ILogger): UseSynapseStorageReturn<ISyncStorage<T>>;
export declare function useCreateStorage<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
    type: 'localStorage';
}, options?: UseSynapseStorageOptions, eventEmitter?: IEventEmitter, logger?: ILogger): UseSynapseStorageReturn<ISyncStorage<T>>;
export declare function useCreateStorage<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
    type: 'indexedDB';
}, options?: UseSynapseStorageOptions, eventEmitter?: IEventEmitter, logger?: ILogger): UseSynapseStorageReturn<IAsyncStorage<T>>;
export declare function useCreateStorage<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
    type: Exclude<StorageType, 'worker'>;
}, options?: UseSynapseStorageOptions, eventEmitter?: IEventEmitter, logger?: ILogger): UseSynapseStorageReturn<IStorage<T>>;
