import { Event } from '../events';
import { CompositeDisposable, IDisposable } from '../lifecycle';
import { LayoutPriority, Orientation } from '../splitview/core/splitview';
import { PaneviewComponentOptions } from './options';
import { Paneview } from './paneview';
import { IPaneBodyPart, IPaneHeaderPart, PaneviewPanel, IPaneviewPanel } from './paneviewPanel';
import { DraggablePaneviewPanel, PaneviewDropEvent2 } from './draggablePaneviewPanel';
export interface SerializedPaneviewPanel {
    snap?: boolean;
    priority?: LayoutPriority;
    minimumSize?: number;
    maximumSize?: number;
    data: {
        id: string;
        component: string;
        title: string;
        headerComponent?: string;
        params?: {
            [index: string]: any;
        };
        state?: {
            [index: string]: any;
        };
    };
    size: number;
    expanded?: boolean;
}
export interface SerializedPaneview {
    size: number;
    views: SerializedPaneviewPanel[];
}
export declare class PaneFramework extends DraggablePaneviewPanel {
    private readonly options;
    constructor(options: {
        id: string;
        component: string;
        headerComponent: string | undefined;
        body: IPaneBodyPart;
        header: IPaneHeaderPart;
        orientation: Orientation;
        isExpanded: boolean;
        disableDnd: boolean;
    });
    getBodyComponent(): IPaneBodyPart;
    getHeaderComponent(): IPaneHeaderPart;
}
export interface AddPaneviewCompponentOptions {
    id: string;
    component: string;
    headerComponent?: string;
    params?: {
        [key: string]: any;
    };
    minimumBodySize?: number;
    maximumBodySize?: number;
    isExpanded?: boolean;
    title: string;
    index?: number;
    size?: number;
}
export interface IPaneviewComponent extends IDisposable {
    readonly width: number;
    readonly height: number;
    readonly minimumSize: number;
    readonly maximumSize: number;
    readonly onDidDrop: Event<PaneviewDropEvent2>;
    readonly onDidLayoutChange: Event<void>;
    addPanel(options: AddPaneviewCompponentOptions): IDisposable;
    layout(width: number, height: number): void;
    toJSON(): SerializedPaneview;
    fromJSON(serializedPaneview: SerializedPaneview, deferComponentLayout?: boolean): void;
    resizeToFit(): void;
    focus(): void;
    getPanels(): IPaneviewPanel[];
    removePanel(panel: IPaneviewPanel): void;
    getPanel(id: string): IPaneviewPanel | undefined;
    movePanel(from: number, to: number): void;
    updateOptions(options: Partial<PaneviewComponentOptions>): void;
}
export declare class PaneviewComponent extends CompositeDisposable implements IPaneviewComponent {
    private element;
    private _disposable;
    private _paneview;
    private readonly _onDidLayoutChange;
    readonly onDidLayoutChange: Event<void>;
    private readonly _onDidDrop;
    readonly onDidDrop: Event<PaneviewDropEvent2>;
    get onDidAddView(): Event<PaneviewPanel>;
    get onDidRemoveView(): Event<PaneviewPanel>;
    set paneview(value: Paneview);
    get paneview(): Paneview;
    get minimumSize(): number;
    get maximumSize(): number;
    get height(): number;
    get width(): number;
    private _options;
    get options(): PaneviewComponentOptions;
    constructor(element: HTMLElement, options: PaneviewComponentOptions);
    focus(): void;
    updateOptions(options: Partial<PaneviewComponentOptions>): void;
    addPanel(options: AddPaneviewCompponentOptions): IDisposable;
    getPanels(): PaneviewPanel[];
    removePanel(panel: PaneviewPanel): void;
    movePanel(from: number, to: number): void;
    getPanel(id: string): PaneviewPanel | undefined;
    layout(width: number, height: number): void;
    /**
     * Resize the layout to fit the parent container
     */
    resizeToFit(): void;
    toJSON(): SerializedPaneview;
    fromJSON(serializedPaneview: SerializedPaneview, deferComponentLayout?: boolean): void;
}
