import { CompositeDisposable, IDisposable } from '../lifecycle';
import { LayoutPriority, Orientation, Sizing, Splitview } from './core/splitview';
import { SplitviewComponentOptions } from './core/options';
import { BaseComponentOptions } from '../panel/types';
import { Event } from '../events';
import { SplitviewPanel, ISplitviewPanel } from './splitviewPanel';
export interface SerializedSplitviewPanelData {
    id: string;
    component: string;
    minimumSize?: number;
    maximumSize?: number;
    params?: {
        [index: string]: any;
    };
    state?: {
        [index: string]: any;
    };
}
export interface SerializedSplitviewPanel {
    snap?: boolean;
    priority?: LayoutPriority;
    data: SerializedSplitviewPanelData;
    size: number;
}
export interface SerializedSplitview {
    orientation: Orientation;
    size: number;
    activeView?: string;
    views: SerializedSplitviewPanel[];
}
export interface AddSplitviewComponentOptions extends BaseComponentOptions {
    size?: number;
    index?: number;
    minimumSize?: number;
    maximumSize?: number;
}
export declare type SplitviewComponentUpdateOptions = Pick<SplitviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents'>;
export interface ISplitviewComponent extends IDisposable {
    readonly minimumSize: number;
    readonly maximumSize: number;
    readonly height: number;
    readonly width: number;
    readonly length: number;
    readonly orientation: Orientation;
    updateOptions(options: SplitviewComponentUpdateOptions): void;
    addPanel(options: AddSplitviewComponentOptions): void;
    layout(width: number, height: number): void;
    onDidLayoutChange: Event<void>;
    toJSON(): SerializedSplitview;
    fromJSON(serializedSplitview: SerializedSplitview, deferComponentLayout?: boolean): void;
    resizeToFit(): void;
    focus(): void;
    getPanel(id: string): ISplitviewPanel | undefined;
    setActive(view: ISplitviewPanel, skipFocus?: boolean): void;
    removePanel(panel: ISplitviewPanel, sizing?: Sizing): void;
    getPanels(): SplitviewPanel[];
    setVisible(panel: ISplitviewPanel, visible: boolean): void;
    movePanel(from: number, to: number): void;
}
/**
 * A high-level implementation of splitview that works using 'panels'
 */
export declare class SplitviewComponent extends CompositeDisposable implements ISplitviewComponent {
    private readonly element;
    private _disposable;
    private _splitview;
    private _activePanel;
    private panels;
    private _options;
    get options(): SplitviewComponentOptions;
    get orientation(): Orientation;
    get splitview(): Splitview;
    set splitview(value: Splitview);
    private readonly _onDidLayoutChange;
    readonly onDidLayoutChange: Event<void>;
    get minimumSize(): number;
    get maximumSize(): number;
    get height(): number;
    get width(): number;
    get length(): number;
    constructor(element: HTMLElement, options: SplitviewComponentOptions);
    updateOptions(options: SplitviewComponentUpdateOptions): void;
    focus(): void;
    movePanel(from: number, to: number): void;
    setVisible(panel: SplitviewPanel, visible: boolean): void;
    setActive(view: SplitviewPanel, skipFocus?: boolean): void;
    getPanels(): SplitviewPanel[];
    removePanel(panel: SplitviewPanel, sizing?: Sizing): void;
    getPanel(id: string): SplitviewPanel | undefined;
    addPanel(options: AddSplitviewComponentOptions): void;
    /**
     * Resize the layout to fit the parent container
     */
    resizeToFit(): void;
    layout(width: number, height: number): void;
    private doAddView;
    toJSON(): SerializedSplitview;
    fromJSON(serializedSplitview: SerializedSplitview, deferComponentLayout?: boolean): void;
    dispose(): void;
}
