import { PaneviewApi } from '../api/component.api';
import { PaneviewPanelApiImpl } from '../api/paneviewPanelApi';
import { Event } from '../events';
import { BasePanelView, BasePanelViewExported, BasePanelViewState } from '../gridview/basePanelView';
import { IDisposable } from '../lifecycle';
import { IFrameworkPart, PanelInitParameters, PanelUpdateEvent } from '../panel/types';
import { IView, Orientation } from '../splitview/core/splitview';
export interface PanePanelViewState extends BasePanelViewState {
    headerComponent?: string;
    title: string;
}
export interface PanePanelInitParameter extends PanelInitParameters {
    minimumBodySize?: number;
    maximumBodySize?: number;
    isExpanded?: boolean;
    title: string;
    containerApi: PaneviewApi;
}
export interface PanePanelComponentInitParameter extends PanePanelInitParameter {
    api: PaneviewPanelApiImpl;
}
export interface IPaneBodyPart extends IDisposable {
    readonly element: HTMLElement;
    update(params: PanelUpdateEvent): void;
    init(parameters: PanePanelComponentInitParameter): void;
}
export interface IPaneHeaderPart extends IDisposable {
    readonly element: HTMLElement;
    update(params: PanelUpdateEvent): void;
    init(parameters: PanePanelComponentInitParameter): void;
}
export interface IPaneview extends IView {
    onDidChangeExpansionState: Event<boolean>;
}
export interface IPaneviewPanel extends BasePanelViewExported<PaneviewPanelApiImpl> {
    readonly minimumSize: number;
    readonly maximumSize: number;
    readonly minimumBodySize: number;
    readonly maximumBodySize: number;
    isExpanded(): boolean;
    setExpanded(isExpanded: boolean): void;
}
export declare abstract class PaneviewPanel extends BasePanelView<PaneviewPanelApiImpl> implements IPaneview, IPaneviewPanel {
    private readonly headerComponent;
    private _onDidChangeExpansionState;
    onDidChangeExpansionState: Event<boolean>;
    private readonly _onDidChange;
    readonly onDidChange: Event<number | undefined>;
    private headerSize;
    private _orthogonalSize;
    private _size;
    private _minimumBodySize;
    private _maximumBodySize;
    private _isExpanded;
    protected header?: HTMLElement;
    protected body?: HTMLElement;
    private bodyPart?;
    private headerPart?;
    private expandedSize;
    private animationTimer;
    private _orientation;
    set orientation(value: Orientation);
    get orientation(): Orientation;
    get minimumSize(): number;
    get maximumSize(): number;
    get size(): number;
    get orthogonalSize(): number;
    set orthogonalSize(size: number);
    get minimumBodySize(): number;
    set minimumBodySize(value: number);
    get maximumBodySize(): number;
    set maximumBodySize(value: number);
    constructor(id: string, component: string, headerComponent: string | undefined, orientation: Orientation, isExpanded: boolean);
    setVisible(isVisible: boolean): void;
    setActive(isActive: boolean): void;
    isExpanded(): boolean;
    setExpanded(expanded: boolean): void;
    layout(size: number, orthogonalSize: number): void;
    init(parameters: PanePanelInitParameter): void;
    toJSON(): PanePanelViewState;
    private renderOnce;
    getComponent(): IFrameworkPart;
    protected abstract getBodyComponent(): IPaneBodyPart;
    protected abstract getHeaderComponent(): IPaneHeaderPart;
}
