/** @packageDocumentation
 * @module Core
 */
import { IDisposable } from "@itwin/core-bentley";
import { IConnectivityInformationProvider } from "../ConnectivityInformationProvider";
import { FavoritePropertiesOrderInfo, PropertyFullName } from "./FavoritePropertiesManager";
/** @internal */
export declare const IMODELJS_PRESENTATION_SETTING_NAMESPACE = "imodeljs.presentation";
/** @internal */
export declare const DEPRECATED_PROPERTIES_SETTING_NAMESPACE = "Properties";
/** @internal */
export declare const FAVORITE_PROPERTIES_SETTING_NAME = "FavoriteProperties";
/** @internal */
export declare const FAVORITE_PROPERTIES_ORDER_INFO_SETTING_NAME = "FavoritePropertiesOrderInfo";
/**
 * Stores user preferences for favorite properties.
 * @public
 */
export interface IFavoritePropertiesStorage {
    /** Load Favorite properties from user-specific settings.
     * @param iTwinId ITwin Id, if the settings is specific to a iTwin, otherwise undefined.
     * @param imodelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.
     */
    loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined>;
    /** Saves Favorite properties to user-specific settings.
     * @param properties Favorite properties to save.
     * @param iTwinId iTwin Id, if the settings is specific to a iTwin, otherwise undefined.
     * @param iModelId iModel Id, if the setting is specific to an iModel, otherwise undefined. The iTwinId must be specified if iModelId is specified.
     */
    saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;
    /** Load array of FavoritePropertiesOrderInfo from user-specific settings.
     * Setting is specific to an iModel.
     * @param iTwinId iTwin Id.
     * @param imodelId iModel Id.
     */
    loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;
    /** Saves FavoritePropertiesOrderInfo array to user-specific settings.
     * Setting is specific to an iModel.
     * @param orderInfo Array of FavoritePropertiesOrderInfo to save.
     * @param iTwinId iTwin Id.
     * @param imodelId iModel Id.
     */
    savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;
}
/**
 * Available implementations of [[IFavoritePropertiesStorage]].
 * @public
 */
export declare enum DefaultFavoritePropertiesStorageTypes {
    /** A no-op storage that doesn't store or return anything. Used for cases when favorite properties aren't used by the application. */
    Noop = 0,
    /** A storage that stores favorite properties information in a browser local storage. */
    BrowserLocalStorage = 1,
    /** A storage that stores favorite properties in a user preferences storage (see [[IModelApp.userPreferences]]). */
    UserPreferencesStorage = 2
}
/**
 * A factory method to create one of the available [[IFavoritePropertiesStorage]] implementations.
 * @public
 */
export declare function createFavoritePropertiesStorage(type: DefaultFavoritePropertiesStorageTypes): IFavoritePropertiesStorage;
/**
 * @internal
 */
export declare class IModelAppFavoritePropertiesStorage implements IFavoritePropertiesStorage {
    private ensureIsSignedIn;
    loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined>;
    saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;
    loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;
    savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;
}
/** @internal */
export interface OfflineCachingFavoritePropertiesStorageProps {
    impl: IFavoritePropertiesStorage;
    connectivityInfo?: IConnectivityInformationProvider;
}
/** @internal */
export declare class OfflineCachingFavoritePropertiesStorage implements IFavoritePropertiesStorage, IDisposable {
    private _connectivityInfo;
    private _impl;
    private _propertiesOfflineCache;
    private _propertiesOrderOfflineCache;
    constructor(props: OfflineCachingFavoritePropertiesStorageProps);
    dispose(): void;
    get impl(): IFavoritePropertiesStorage;
    private onConnectivityStatusChanged;
    loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<string> | undefined>;
    saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;
    loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;
    savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;
}
/** @internal */
export declare class NoopFavoritePropertiesStorage implements IFavoritePropertiesStorage {
    loadProperties(_iTwinId?: string, _imodelId?: string): Promise<Set<PropertyFullName> | undefined>;
    saveProperties(_properties: Set<PropertyFullName>, _iTwinId?: string, _imodelId?: string): Promise<void>;
    loadPropertiesOrder(_iTwinId: string | undefined, _imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;
    savePropertiesOrder(_orderInfos: FavoritePropertiesOrderInfo[], _iTwinId: string | undefined, _imodelId: string): Promise<void>;
}
/** @internal */
export declare class BrowserLocalFavoritePropertiesStorage implements IFavoritePropertiesStorage {
    private _localStorage;
    constructor(props?: {
        localStorage?: Storage;
    });
    createFavoritesSettingItemKey(iTwinId?: string, imodelId?: string): string;
    createOrderSettingItemKey(iTwinId?: string, imodelId?: string): string;
    loadProperties(iTwinId?: string, imodelId?: string): Promise<Set<PropertyFullName> | undefined>;
    saveProperties(properties: Set<PropertyFullName>, iTwinId?: string, imodelId?: string): Promise<void>;
    loadPropertiesOrder(iTwinId: string | undefined, imodelId: string): Promise<FavoritePropertiesOrderInfo[] | undefined>;
    savePropertiesOrder(orderInfos: FavoritePropertiesOrderInfo[], iTwinId: string | undefined, imodelId: string): Promise<void>;
}
//# sourceMappingURL=FavoritePropertiesStorage.d.ts.map