/** @packageDocumentation
 * @module Utilities
 */
import type { Store } from "redux";
import type { Localization } from "@itwin/core-common";
import type { IModelConnection, ViewState } from "@itwin/core-frontend";
import { SnapMode } from "@itwin/core-frontend";
import { UiEvent } from "@itwin/appui-abstract";
import type { UiStateStorage } from "@itwin/core-react";
import { SettingsManager } from "@itwin/core-react";
import type { FrameworkState } from "./redux/FrameworkState";
import type { CursorMenuData, PresentationSelectionScope } from "./redux/SessionState";
import type { HideIsolateEmphasizeActionHandler } from "./selection/HideIsolateEmphasizeManager";
import { WidgetManager } from "./widgets/WidgetManager";
import type { FrameworkBackstage } from "./framework/FrameworkBackstage";
import type { FrameworkChildWindows } from "./framework/FrameworkChildWindows";
import type { FrameworkControls } from "./framework/FrameworkControls";
import type { FrameworkFrontstages } from "./framework/FrameworkFrontstages";
import type { FrameworkToolSettings } from "./framework/FrameworkToolSettings";
import type { FrameworkContent } from "./framework/FrameworkContent";
import type { FrameworkDialogs } from "./framework/FrameworkDialogs";
import type { FrameworkKeyboardShortcuts } from "./framework/FrameworkKeyboardShortcuts";
import type { FrameworkVisibility } from "./framework/FrameworkVisibility";
/** Interface to be implemented but any classes that wants to load their user settings when the UiStateEntry storage class is set.
 * @public
 */
export interface UserSettingsProvider {
    /** Unique provider Id */
    providerId: string;
    /** Function to load settings from settings storage */
    loadUserSettings(storage: UiStateStorage): Promise<void>;
}
/** UiVisibility Event Args interface.
 * @public
 */
export interface UiVisibilityEventArgs {
    visible: boolean;
}
/** UiVisibility Event class.
 * @public
 */
export declare class UiVisibilityChangedEvent extends UiEvent<UiVisibilityEventArgs> {
}
/** TrackingTime time argument used by our feature tracking manager as an option argument to the TelemetryClient
 * @internal
 */
export interface TrackingTime {
    startTime: Date;
    endTime: Date;
}
/**
 * Manages the Redux store, localization service and iModel, Project and Login services for the ui-framework package.
 * @public
 */
export declare class UiFramework {
    /**
     * Operation on the backstage component.
     * @public
     */
    static get backstage(): FrameworkBackstage;
    /**
     * Manage access to the child windows.
     * @public
     */
    static get childWindows(): FrameworkChildWindows;
    /**
     * Manage registered controls
     * @public
     */
    static get controls(): FrameworkControls;
    /**
     * Manage access to frontstages and related helper methods.
     * @public
     */
    static get frontstages(): FrameworkFrontstages;
    /**
     * Manage access and behavior of the tool settings.
     * @public
     */
    static get toolSettings(): FrameworkToolSettings;
    /**
     * Manage content presented by the frontstages.
     * @public
     */
    static get content(): FrameworkContent;
    /**
     * Manage displayed dialogs.
     * @public
     */
    static get dialogs(): FrameworkDialogs;
    /**
     * Manages global keyboard shortcuts
     * @public
     */
    static get keyboardShortcuts(): FrameworkKeyboardShortcuts;
    /**
     * Manages UI visibility (Show/Hide)
     * @public
     */
    static get visibility(): FrameworkVisibility;
    private static _initialized;
    private static _store?;
    private static _complaint;
    private static _frameworkStateKeyInStore;
    private static _backstageManager?;
    private static _widgetManager?;
    private static _hideIsolateEmphasizeActionHandler?;
    /** this provides a default state storage handler */
    private static _uiStateStorage;
    private static _settingsManager?;
    private static _uiSettingsProviderRegistry;
    private static _childWindowManager;
    static useDefaultPopoutUrl: boolean;
    /** Registers class that will be informed when the UserSettingsStorage location has been set or changed. This allows
     * classes to load any previously saved settings from the new storage location. Common storage locations are the browser's
     * local storage, or the iTwin Product Settings cloud storage available via the SettingsAdmin see `IModelApp.settingsAdmin`.
     * @public
     */
    static registerUserSettingsProvider(entry: UserSettingsProvider): boolean;
    /** Get Show Ui event.
     * @public
     */
    static readonly onUiVisibilityChanged: UiVisibilityChangedEvent;
    /**
     * Called by the application to initialize the UiFramework. Also initializes UIIModelComponents, UiComponents, UiCore.
     * @param store The single Redux store created by the host application. If this is `undefined` then it is assumed that the [[StateManager]] is being used to provide the Redux store.
     * @param frameworkStateKey The name of the key used by the app when adding the UiFramework state into the Redux store. If not defined "frameworkState" is assumed. This value is ignored if [[StateManager]] is being used. The StateManager use "frameworkState".
     */
    static initialize(store: Store<any> | undefined, frameworkStateKey?: string): Promise<void>;
    /**
     * Called by the application to initialize the UiFramework. Also initializes UIIModelComponents, UiComponents, UiCore.
     * @param store The single Redux store created by the host application. If this is `undefined` then it is assumed that the [[StateManager]] is being used to provide the Redux store.
     * @param frameworkStateKey The name of the key used by the app when adding the UiFramework state into the Redux store. If not defined "frameworkState" is assumed. This value is ignored if [[StateManager]] is being used. The StateManager use "frameworkState".
     *
     * @internal
     */
    static initializeEx(store: Store<any> | undefined, frameworkStateKey?: string): Promise<void>;
    /** Un-registers the UiFramework internationalization service namespace */
    static terminate(): void;
    /** Determines if UiFramework has been initialized */
    static get initialized(): boolean;
    /** Property that returns the SettingManager used by AppUI-based applications.
     * @public
     */
    static get settingsManager(): SettingsManager;
    /** @public */
    static get frameworkStateKey(): string;
    /** The UiFramework state maintained by Redux
     * @public
     */
    static get frameworkState(): FrameworkState | undefined;
    /** The Redux store */
    static get store(): Store<any>;
    /** The internationalization service created by the app.
     * @internal
     */
    static get localization(): Localization;
    /** The internationalization service namespace. */
    static get localizationNamespace(): string;
    /** @public */
    static get hideIsolateEmphasizeActionHandler(): HideIsolateEmphasizeActionHandler;
    /** @public */
    static setHideIsolateEmphasizeActionHandler(handler: HideIsolateEmphasizeActionHandler | undefined): void;
    /** @alpha */
    static get widgetManager(): WidgetManager;
    /** Calls localization.getLocalizedStringWithNamespace with the "UiFramework" namespace. Do NOT include the namespace in the key.
     * @internal
     */
    static translate(key: string | string[]): string;
    /** @internal */
    static get packageName(): string;
    /** @internal */
    static loggerCategory(obj: any): string;
    static dispatchActionToStore(type: string, payload: any, immediateSync?: boolean): void;
    static setAccudrawSnapMode(snapMode: SnapMode): void;
    static getAccudrawSnapMode(): SnapMode;
    static getActiveSelectionScope(): string;
    static setActiveSelectionScope(selectionScopeId: string): void;
    /** @public */
    static openCursorMenu(menuData: CursorMenuData | undefined): void;
    /** @public */
    static closeCursorMenu(): void;
    /** @public */
    static getCursorMenuData(): CursorMenuData | undefined;
    static getActiveIModelId(): string;
    static setActiveIModelId(iModelId: string): void;
    static setIModelConnection(iModelConnection: IModelConnection | undefined, immediateSync?: boolean): void;
    static getIModelConnection(): IModelConnection | undefined;
    /** Called by iModelApp to initialize saved UI state from registered UseSettingsProviders
     * @public
     */
    static initializeStateFromUserSettingsProviders(immediateSync?: boolean): Promise<void>;
    /** @public */
    static setUiStateStorage(storage: UiStateStorage, immediateSync?: boolean): Promise<void>;
    /** The UI Settings Storage is a convenient wrapper around Local Storage to assist in caching state information across user sessions.
     * It was previously used to conflate both the state information across session and the information driven directly from user explicit action,
     * which are now handled with user preferences.
     * @public
     */
    static getUiStateStorage(): UiStateStorage;
    static setDefaultIModelViewportControlId(iModelViewportControlId: string, immediateSync?: boolean): void;
    static getDefaultIModelViewportControlId(): string | undefined;
    static setDefaultViewId(viewId: string, immediateSync?: boolean): void;
    static getDefaultViewId(): string | undefined;
    static setDefaultViewState(viewState: ViewState, immediateSync?: boolean): void;
    static getDefaultViewState(): ViewState | undefined;
    /** @public */
    static getAvailableSelectionScopes(): PresentationSelectionScope[];
    static getIsUiVisible(): boolean;
    static setIsUiVisible(visible: boolean): void;
    static setColorTheme(theme: string): void;
    static getColorTheme(): string;
    /** UiFramework.setToolbarOpacity() sets the non-hovered opacity to the value specified. Used by UI 2.0 and later.
     * @param opacity a value between 0 and 1. The default value is 0.5. IT IS NOT ADVISED TO USE A VALUE BELOW 0.2
     * @public
     */
    static setToolbarOpacity(opacity: number): void;
    /** UiFramework.getToolbarOpacity() returns a number between 0 and 1 that is the non-hovered opacity for toolbars.
     * @public
     */
    static getToolbarOpacity(): number;
    static setWidgetOpacity(opacity: number): void;
    static getWidgetOpacity(): number;
    static isMobile(): boolean;
    static get showWidgetIcon(): boolean;
    static setShowWidgetIcon(value: boolean): void;
    /** Animate Tool Settings on appear  */
    static get animateToolSettings(): boolean;
    static setAnimateToolSettings(value: boolean): void;
    /** Use Tool Name As Tool Settings Widget Tab Label */
    static get useToolAsToolSettingsLabel(): boolean;
    static setUseToolAsToolSettingsLabel(value: boolean): void;
    /** When `true`, panels will close as soon as the mouse leave the panel.
     * When `false` (default), panels will close on next click outside the panel.
     * @public */
    static get autoCollapseUnpinnedPanels(): boolean;
    /** Method used to enable the automatic closing of an unpinned widget panel as soon as the
     * mouse leaves the widget panel. The default behavior is to require a mouse click outside
     * the panel before it is closed.
     * @public */
    static setAutoCollapseUnpinnedPanels(value: boolean): void;
    static get useDragInteraction(): boolean;
    static setUseDragInteraction(useDragInteraction: boolean): void;
    /** Returns the variable controlling whether the overlay is displayed in a Viewport
     * @public
     */
    static get viewOverlayDisplay(): boolean;
    /** Set the variable that controls display of the view overlay. Applies to all viewports in the app
     * @public
     */
    static setViewOverlayDisplay(display: boolean): void;
    /** Determines whether a ContextMenu is open
     * @alpha
     * */
    static get isContextMenuOpen(): boolean;
}
//# sourceMappingURL=UiFramework.d.ts.map