/** @packageDocumentation
 * @module Frontstage
 */
import * as React from "react";
import { StagePanelLocation } from "@itwin/appui-abstract";
import { NestedStagePanelKey, NestedStagePanelsManagerProps, NineZoneStagePanelManagerProps, StagePanelType as NZ_StagePanelType, WidgetZoneId, ZonesManagerWidgetsProps } from "@itwin/appui-layout-react";
import { StagePanelChangeHandler, WidgetChangeHandler, ZoneDefProvider } from "../frontstage/FrontstageComposer";
import { WidgetProps } from "../widgets/WidgetProps";
import { WidgetTabs } from "../widgets/WidgetStack";
import { ZoneLocation } from "../zones/Zone";
import { StagePanelDef, StagePanelState as StagePanelState } from "./StagePanelDef";
import { WidgetDef } from "../widgets/WidgetDef";
/** Available StagePanel locations.
 * ------------------------------------------------------------------------------------
 * TopMost
 * ------------------------------------------------------------------------------------
 * Left     | Top                                                           | Right
 *          |---------------------------------------------------------------|
 *          | Nine-zone                                                     |
 *          |                                                               |
 *          |                                                               |
 *          |                                                               |
 *          |                                                               |
 *          |                                                               |
 *          |---------------------------------------------------------------|
 *          | Bottom                                                        |
 * ------------------------------------------------------------------------------------
 * BottomMost
 * ------------------------------------------------------------------------------------
 */
/** Properties of a Stage Panel Zone
 * @public @deprecated in 3.0. UI 1.0 will be removed in AppUi 4.0.
 */
export interface StagePanelZoneProps {
    /** Properties for the Widgets in this Zone.
     * @note Stable `WidgetProps["id"]` is generated if id is not provided to correctly save and restore App layout.
     * [[Frontstage]] version must be increased when Widget location is changed or new widgets are added/removed.
     */
    widgets: Array<React.ReactElement<WidgetProps>>;
    /** Any application data to attach to this Zone. */
    applicationData?: any;
}
/** Properties of the Stage Panel Zones
 * @public @deprecated in 3.0. UI 1.0 will be removed in AppUi 4.0.
 */
export interface StagePanelZonesProps {
    /** Properties for the Widgets in the Start section. */
    start?: StagePanelZoneProps;
    /** Properties for the Widgets in the Middle section. Deprecated - all widgets originally targeted for "middle" will now go to "end". */
    middle?: StagePanelZoneProps;
    /** Properties for the Widgets in the End section. */
    end?: StagePanelZoneProps;
}
/** Available units of panel maximum size. Pixels or percentage of 9-Zone App size.
 * @note Percentage of 9-Zone `height` is used for top/bottom panel and percentage of 9-Zone `width` is used for left/right panel.
 * @public
 */
export declare type StagePanelMaxSizeSpec = number | {
    percentage: number;
};
/** Properties of a [[StagePanel]] component
 * @deprecated in 3.5. Props of a deprecated component.
 * @public
 */
export interface StagePanelProps {
    /** Describes which zones are allowed in this stage panel. */
    allowedZones?: ZoneLocation[];
    /** Any application data to attach to this Panel. */
    applicationData?: any;
    /** Default Panel state. Controls how the panel is initially displayed. Defaults to StagePanelState.Open. */
    defaultState?: StagePanelState;
    /** Stage panel header. */
    header?: React.ReactNode;
    /** Maximum size of the panel. */
    maxSize?: StagePanelMaxSizeSpec;
    /** Minimum size of the panel. */
    minSize?: number;
    /** Indicates whether the panel is pinned. Defaults to true. */
    pinned?: boolean;
    /** Indicates whether the panel is resizable. Defaults to true. */
    resizable: boolean;
    /** Default size of the panel. */
    size?: number;
    /** Properties for the Widgets in this Panel.
     * @note Stable `WidgetProps["id"]` is generated if id is not provided to correctly save and restore App layout.
     * [[Frontstage]] version must be increased when Widget location is changed or new widgets are added/removed.
     */
    widgets?: Array<React.ReactElement<WidgetProps>>;
    /** Properties for the Panel Zones in this Panel.
     * @beta */
    panelZones?: StagePanelZonesProps;
    /** @internal */
    runtimeProps?: StagePanelRuntimeProps;
}
/** Default properties of [[StagePanel]] component.
 * @deprecated in 3.5. Default props of a deprecated component.
 * @public
 */
export declare type StagePanelDefaultProps = Pick<StagePanelProps, "resizable">;
/** Runtime Properties for the [[StagePanel]] component.
 * @internal
 */
export interface StagePanelRuntimeProps {
    draggedWidgetId: WidgetZoneId | undefined;
    getWidgetContentRef: (id: WidgetZoneId) => React.Ref<HTMLDivElement>;
    isInFooterMode: boolean;
    isTargeted: boolean;
    panel: NineZoneStagePanelManagerProps;
    panelDef: StagePanelDef;
    stagePanelChangeHandler: StagePanelChangeHandler;
    widgetChangeHandler: WidgetChangeHandler;
    widgets: ZonesManagerWidgetsProps;
    widgetTabs: WidgetTabs;
    zoneDefProvider: ZoneDefProvider;
}
interface StagePanelComponentState {
    panelState: StagePanelState;
    stagePanelWidgets: ReadonlyArray<WidgetDef["id"]>;
}
/** Frontstage Panel React component.
 * @deprecated in 3.6. Use [[StagePanelConfig]] instead.
 * @public
 */
export declare class StagePanel extends React.Component<StagePanelProps, StagePanelComponentState> {
    static readonly defaultProps: StagePanelDefaultProps;
    constructor(props: StagePanelProps);
    static initializeStagePanelDef(panelDef: StagePanelDef, props: StagePanelProps, panelLocation: StagePanelLocation): void;
    componentDidMount(): void;
    componentDidUpdate(prevProps: StagePanelProps): void;
    componentWillUnmount(): void;
    render(): React.ReactNode;
    private _handleRenderPane;
    private _handlePanelStateChangedEvent;
    private _handleWidgetStateChangedEvent;
    private _getVisibleStagePanelWidgets;
}
/** @internal */
export declare const getStagePanelType: (location: StagePanelLocation) => NZ_StagePanelType;
/** @internal */
export declare const getNestedStagePanelKey: (location: StagePanelLocation) => NestedStagePanelKey<NestedStagePanelsManagerProps>;
export {};
//# sourceMappingURL=StagePanel.d.ts.map