/** @packageDocumentation
 * @module Frontstage
 */
/// <reference types="react" />
import { StagePanelLocation, StagePanelSection, UiEvent } from "@itwin/appui-abstract";
import { NineZoneState, PanelSide } from "@itwin/appui-layout-react";
import { WidgetDef } from "../widgets/WidgetDef";
import { WidgetHost } from "../widgets/WidgetHost";
import { StagePanelMaxSizeSpec, StagePanelProps, StagePanelZoneProps, StagePanelZonesProps } from "./StagePanel";
import { ZoneLocation } from "../zones/Zone";
/** Enum for StagePanel state.
 * @public
 */
export declare enum StagePanelState {
    Off = 0,
    Minimized = 1,
    Open = 2,
    Popup = 3
}
/** Panel State Changed Event Args interface.
 * @public
 */
export interface PanelStateChangedEventArgs {
    panelDef: StagePanelDef;
    panelState: StagePanelState;
}
/** Panel State Changed Event class.
 * @beta
 */
export declare class PanelStateChangedEvent extends UiEvent<PanelStateChangedEventArgs> {
}
/** @internal */
export interface PanelSizeChangedEventArgs {
    panelDef: StagePanelDef;
    size: number | undefined;
}
/** @internal */
export declare class PanelSizeChangedEvent extends UiEvent<PanelSizeChangedEventArgs> {
}
/**
 * A StagePanelDef represents each Stage Panel within a Frontstage.
 * @public
 */
export declare class StagePanelDef extends WidgetHost {
    private _panelState;
    private _defaultState;
    private _maxSizeSpec;
    private _minSize;
    private _size;
    private _defaultSize;
    private _resizable;
    private _pinned;
    private _applicationData?;
    private _location;
    private _panelZones;
    /** Constructor for PanelDef.
     */
    constructor();
    /** @internal */
    get maxSizeSpec(): StagePanelMaxSizeSpec | undefined;
    /** @internal */
    get minSize(): number | undefined;
    /** Default size of the panel */
    get size(): number | undefined;
    set size(size: number | undefined);
    /** Indicates whether the panel is resizable. */
    get resizable(): boolean;
    /** Indicates whether the panel is pinned. */
    get pinned(): boolean;
    /** Any application data to attach to this Panel. */
    get applicationData(): any | undefined;
    /** Location of panel. */
    get location(): StagePanelLocation;
    /** Panel state. Defaults to PanelState.Open. */
    get panelState(): StagePanelState;
    set panelState(panelState: StagePanelState);
    /** @internal */
    get defaultState(): StagePanelState;
    /** @internal */
    get defaultSize(): number | undefined;
    /** Panel zones.
     * @internal
     */
    get panelZones(): StagePanelZonesDef;
    /** @internal */
    initializeFromProps(props?: StagePanelProps, location?: StagePanelLocation): void;
    /** Gets the list of Widgets. */
    get widgetDefs(): ReadonlyArray<WidgetDef>;
    /** Gets the list of Widgets (w/o StagePanelZone widgets).
     * @internal
     */
    get panelWidgetDefs(): readonly WidgetDef[];
    /** @internal */
    updateDynamicWidgetDefs(stageId: string, stageUsage: string, location: ZoneLocation | StagePanelLocation, _section: StagePanelSection | undefined, allStageWidgetDefs: WidgetDef[], frontstageApplicationData?: any): void;
}
/** @internal */
export declare type StagePanelZoneDefKeys = keyof Pick<StagePanelZonesDef, "start" | "end">;
/** @internal */
export declare class StagePanelZonesDef {
    private _start;
    private _end;
    get start(): StagePanelZoneDef;
    get end(): StagePanelZoneDef;
    /** @internal */
    initializeFromProps(props: StagePanelZonesProps, panelLocation: StagePanelLocation): void;
    /** @internal */
    [Symbol.iterator](): Iterator<[StagePanelZoneDefKeys, StagePanelZoneDef]>;
}
/** @internal */
export declare class StagePanelZoneDef extends WidgetHost {
    /** @internal */
    initializeFromProps(props: StagePanelZoneProps, panelLocation: StagePanelLocation, panelZone: StagePanelZoneDefKeys): void;
}
/** @internal */
export declare function toPanelSide(location: StagePanelLocation): PanelSide;
/** @internal */
export declare const setPanelSize: (base: {
    readonly draggedTab: {
        readonly tabId: string;
        readonly position: {
            readonly x: number;
            readonly y: number;
        };
        readonly home: {
            readonly widgetIndex: number;
            readonly widgetId: string | undefined;
            readonly side: PanelSide;
        };
    } | undefined;
    readonly floatingWidgets: {
        readonly byId: {
            readonly [x: string]: {
                readonly bounds: {
                    readonly left: number;
                    readonly top: number;
                    readonly right: number;
                    readonly bottom: number;
                };
                readonly id: string;
                readonly home: {
                    readonly widgetIndex: number;
                    readonly widgetId: string | undefined;
                    readonly side: PanelSide;
                };
                readonly userSized?: boolean | undefined;
                readonly hidden?: boolean | undefined;
            };
        };
        readonly allIds: readonly string[];
    };
    readonly popoutWidgets: {
        readonly byId: {
            readonly [x: string]: {
                readonly bounds: {
                    readonly left: number;
                    readonly top: number;
                    readonly right: number;
                    readonly bottom: number;
                };
                readonly id: string;
                readonly home: {
                    readonly widgetIndex: number;
                    readonly widgetId: string | undefined;
                    readonly side: PanelSide;
                };
            };
        };
        readonly allIds: readonly string[];
    };
    readonly panels: {
        readonly bottom: {
            readonly span: boolean;
            readonly side: import("@itwin/appui-layout-react").HorizontalPanelSide;
            readonly collapseOffset: number;
            readonly collapsed: boolean;
            readonly maxSize: number;
            readonly minSize: number;
            readonly pinned: boolean;
            readonly resizable: boolean;
            readonly size: number | undefined;
            readonly widgets: readonly string[];
            readonly maxWidgetCount: number;
            readonly splitterPercent: number | undefined;
        };
        readonly left: {
            readonly side: import("@itwin/appui-layout-react").VerticalPanelSide;
            readonly collapseOffset: number;
            readonly collapsed: boolean;
            readonly maxSize: number;
            readonly minSize: number;
            readonly pinned: boolean;
            readonly resizable: boolean;
            readonly size: number | undefined;
            readonly widgets: readonly string[];
            readonly maxWidgetCount: number;
            readonly splitterPercent: number | undefined;
        };
        readonly right: {
            readonly side: import("@itwin/appui-layout-react").VerticalPanelSide;
            readonly collapseOffset: number;
            readonly collapsed: boolean;
            readonly maxSize: number;
            readonly minSize: number;
            readonly pinned: boolean;
            readonly resizable: boolean;
            readonly size: number | undefined;
            readonly widgets: readonly string[];
            readonly maxWidgetCount: number;
            readonly splitterPercent: number | undefined;
        };
        readonly top: {
            readonly span: boolean;
            readonly side: import("@itwin/appui-layout-react").HorizontalPanelSide;
            readonly collapseOffset: number;
            readonly collapsed: boolean;
            readonly maxSize: number;
            readonly minSize: number;
            readonly pinned: boolean;
            readonly resizable: boolean;
            readonly size: number | undefined;
            readonly widgets: readonly string[];
            readonly maxWidgetCount: number;
            readonly splitterPercent: number | undefined;
        };
    };
    readonly tabs: {
        readonly [x: string]: {
            readonly id: string;
            readonly label: string;
            readonly iconSpec?: boolean | import("react").ReactText | {
                readonly stringGetter: () => string;
                readonly syncEventIds: readonly string[];
                readonly value: string;
                readonly refresh: () => boolean;
            } | {
                readonly type: string | import("react").JSXElementConstructor<any>;
                readonly props: any;
                readonly key: import("react").Key | null;
            } | {} | {
                readonly [Symbol.iterator]: () => Iterator<import("react").ReactNode, any, undefined>;
            } | {
                readonly key: import("react").Key | null;
                readonly children: boolean | import("react").ReactText | {
                    readonly type: string | import("react").JSXElementConstructor<any>;
                    readonly props: any;
                    readonly key: import("react").Key | null;
                } | {} | {
                    readonly [Symbol.iterator]: () => Iterator<import("react").ReactNode, any, undefined>;
                } | any | null | undefined;
                readonly type: string | import("react").JSXElementConstructor<any>;
                readonly props: any;
            } | null | undefined;
            readonly preferredFloatingWidgetSize?: {
                readonly width: number;
                readonly height: number;
            } | undefined;
            readonly preferredPanelWidgetSize?: "fit-content" | undefined;
            readonly allowedPanelTargets?: readonly PanelSide[] | undefined;
            readonly canPopout?: boolean | undefined;
            readonly userSized?: boolean | undefined;
            readonly isFloatingStateWindowResizable?: boolean | undefined;
            readonly hideWithUiWhenFloating?: boolean | undefined;
        };
    };
    readonly toolSettings: {
        readonly type: "docked";
    } | {
        readonly type: "widget";
    };
    readonly widgets: {
        readonly [x: string]: {
            readonly activeTabId: string;
            readonly id: string;
            readonly minimized: boolean;
            readonly tabs: readonly string[];
            readonly isFloatingStateWindowResizable?: boolean | undefined;
        };
    };
    readonly size: {
        readonly width: number;
        readonly height: number;
    };
}, side: PanelSide, size: number | undefined) => import("immer/dist/internal").WritableDraft<NineZoneState>;
//# sourceMappingURL=StagePanelDef.d.ts.map