/** @packageDocumentation
 * @module Frontstage
 */
import * as React from "react";
import { StagePanelLocation } from "@itwin/appui-abstract";
import { CommonProps } from "@itwin/core-react";
import { WidgetZoneId, ZoneManagerProps, ZonesManagerProps } from "@itwin/appui-layout-react";
import { ContentGroup, ContentGroupProvider } from "../content/ContentGroup";
import { ToolItemDef } from "../shared/ToolItemDef";
import { StagePanelProps } from "../stagepanels/StagePanel";
import { StagePanelDef } from "../stagepanels/StagePanelDef";
import { WidgetDef } from "../widgets/WidgetDef";
import { ZoneLocation, ZoneProps } from "../zones/Zone";
import { ZoneDef } from "../zones/ZoneDef";
import { FrontstageRuntimeProps, ZoneDefProvider } from "./FrontstageComposer";
/** Properties for a [[Frontstage]] component.
 * @deprecated in 3.5. Props of a deprecated component.
 * @public
 */
export interface FrontstageProps extends CommonProps {
    /** Id for the Frontstage */
    id: string;
    /** Tool that is started once the Frontstage is activated.
     * Use [UiFramework.frontstages.onFrontstageReadyEvent] instead.
     */
    defaultTool: ToolItemDef;
    /** The Content Group providing the Content Views */
    contentGroup: ContentGroup | ContentGroupProvider;
    /** Id of the Content View to be activated initially */
    defaultContentId?: string;
    /** Indicated whether the StatusBar is in footer mode or widget mode. Defaults to true.
     * @deprecated in 3.3. In upcoming version, widget mode will be removed and footer mode will always be true.
    */
    isInFooterMode?: boolean;
    /** Any application data to attach to this Frontstage. */
    applicationData?: any;
    /** Usage type for this Frontstage. */
    usage?: string;
    /** Frontstage version. Used to force saved layout reinitialization after changes to frontstage.
     * @note This value should be increased when changes are made to Frontstage.
     * Increasing the value will make sure to reinitialize App layout instead of restoring to old layout.
     * Version increase is required when widgets are added/removed.
     */
    version?: number;
    /** if isIModelIndependent then frontstage is independent from any iModel. */
    isIModelIndependent?: boolean;
    /** The Zone in the top-left corner.
     * @deprecated in 3.0. Use 'contentManipulationTools' property. */
    topLeft?: React.ReactElement<ZoneProps>;
    /** The Zone along the top-center edge.
     * @deprecated in 3.0. Use 'toolSettings' property. */
    topCenter?: React.ReactElement<ZoneProps>;
    /** The Zone in the top-right corner.
     * @deprecated in 3.0. Use 'viewNavigationTools' property. */
    topRight?: React.ReactElement<ZoneProps>;
    /** The Zone along the center-left edge.
     * @deprecated in 3.0. Place widgets in appropriate stage panel zone. */
    centerLeft?: React.ReactElement<ZoneProps>;
    /** The Zone along the center-right edge.
     * @deprecated in 3.0. Place widgets in appropriate stage panel zone. */
    centerRight?: React.ReactElement<ZoneProps>;
    /** The Zone in the bottom-left corner.
     * @deprecated in 3.0. Place widgets in appropriate stage panel zone.  */
    bottomLeft?: React.ReactElement<ZoneProps>;
    /** The Zone along the bottom-center edge.
     * @deprecated in 3.0. use statusBar property */
    bottomCenter?: React.ReactElement<ZoneProps>;
    /** The Zone in the bottom-right corner.
     * @deprecated in 3.0. Place widgets in appropriate stage panel zone. */
    bottomRight?: React.ReactElement<ZoneProps>;
    /** The Zone in the top-left corner that shows tools typically used to query and modify content. To be used in place of deprecated topLeft zone definition. */
    contentManipulationTools?: React.ReactElement<ZoneProps>;
    /** The Zone the that shows settings for the active tool. To be used in place of deprecated topCenter zone definition. */
    toolSettings?: React.ReactElement<ZoneProps>;
    /** The Zone in the top-right corner that shows view navigation tools. To be used in place of deprecated topRight zone definition */
    viewNavigationTools?: React.ReactElement<ZoneProps>;
    /** The status bar Zone shown as the application footer. To be used in place of deprecated bottomCenter zone definition. */
    statusBar?: React.ReactElement<ZoneProps>;
    /** The StagePanel on the top of the AppUi container. */
    topPanel?: React.ReactElement<StagePanelProps>;
    /** The StagePanel on the very top across the full width.
     * @deprecated in 3.0. Only topPanel is supported in UI 2.0 */
    topMostPanel?: React.ReactElement<StagePanelProps>;
    /** The StagePanel on the left.  */
    leftPanel?: React.ReactElement<StagePanelProps>;
    /** The StagePanel on the right.  */
    rightPanel?: React.ReactElement<StagePanelProps>;
    /** The StagePanel on the bottom of the AppUi container.  */
    bottomPanel?: React.ReactElement<StagePanelProps>;
    /** The StagePanel on the very bottom across the full width.
     * @deprecated in 3.0. Only bottomPanel is supported in UI 2.0  */
    bottomMostPanel?: React.ReactElement<StagePanelProps>;
    /** @internal */
    runtimeProps?: FrontstageRuntimeProps;
}
interface FrontstageState {
    isUiVisible: boolean;
    widgetIdToContent: Partial<{
        [id in WidgetZoneId]: HTMLDivElement | undefined;
    }>;
}
/** Frontstage React component.
 * A Frontstage is a full-screen configuration designed to enable the user to accomplish a task.
 * @deprecated in 3.6. Use [[FrontstageConfig]] instead.
 * @public
 */
export declare class Frontstage extends React.Component<FrontstageProps, FrontstageState> {
    private _isMounted;
    private static _zoneIds;
    private _contentRefs;
    private _zonesMeasurer;
    private _floatingZonesMeasurer;
    private _zonesStyle;
    private _zonesFooterModeStyle;
    /** @internal */
    constructor(props: FrontstageProps);
    /** React lifecycle method.
     * @internal
     */
    componentDidMount(): Promise<void>;
    componentDidUpdate(): void;
    /** React lifecycle method.
     * @internal
     */
    componentWillUnmount(): void;
    private _uiVisibilityChanged;
    private _handleWidgetsChanged;
    private _handleUiProviderRegisteredEvent;
    private updateWidgetDefs;
    /** @internal */
    static createZoneDef(zoneNode: React.ReactElement<ZoneProps> | undefined, zoneLocation: ZoneLocation, props: FrontstageProps): ZoneDef | undefined;
    private static getZoneElement;
    /** @internal */
    static createStagePanelDef(panelLocation: StagePanelLocation, props: FrontstageProps): StagePanelDef | undefined;
    private static getStagePanelElement;
    private _getContentRef;
    private doContentLayoutRender;
    private cloneStagePanelElement;
    private cloneZoneElements;
    private cloneWidgetContentElements;
    /** React render method
     * @internal
     */
    render(): React.ReactNode;
}
/** @internal */
export declare const getExtendedZone: (zoneId: WidgetZoneId, zones: ZonesManagerProps, defProvider: ZoneDefProvider) => ZoneManagerProps;
/** Hook that returns active frontstage id.
 * @public
 */
export declare const useActiveFrontstageId: () => string;
/** @internal */
export declare function useActiveFrontstageDef(): import("./FrontstageDef").FrontstageDef | undefined;
/** Hook that returns the widgetDef for a specific widgetId within the active frontstage.
 * @public
 */
export declare function useSpecificWidgetDef(widgetId: string): WidgetDef | undefined;
export {};
//# sourceMappingURL=Frontstage.d.ts.map