import { Event } from '../../events';
export declare enum Orientation {
    HORIZONTAL = "HORIZONTAL",
    VERTICAL = "VERTICAL"
}
export declare enum SashState {
    MAXIMUM = 0,
    MINIMUM = 1,
    DISABLED = 2,
    ENABLED = 3
}
export interface ISplitviewStyles {
    separatorBorder: string;
}
export interface SplitViewOptions {
    readonly orientation: Orientation;
    readonly descriptor?: ISplitViewDescriptor;
    readonly proportionalLayout?: boolean;
    readonly styles?: ISplitviewStyles;
}
export declare enum LayoutPriority {
    Low = "low",
    High = "high",
    Normal = "normal"
}
export interface IBaseView {
    minimumSize: number;
    maximumSize: number;
    snap?: boolean;
    priority?: LayoutPriority;
}
export interface IView extends IBaseView {
    readonly element: HTMLElement | DocumentFragment;
    readonly onDidChange: Event<number | undefined>;
    layout(size: number, orthogonalSize: number): void;
    setVisible(visible: boolean): void;
}
export declare type DistributeSizing = {
    type: 'distribute';
};
export declare type SplitSizing = {
    type: 'split';
    index: number;
};
export declare type InvisibleSizing = {
    type: 'invisible';
    cachedVisibleSize: number;
};
export declare type Sizing = DistributeSizing | SplitSizing | InvisibleSizing;
export declare namespace Sizing {
    const Distribute: DistributeSizing;
    function Split(index: number): SplitSizing;
    function Invisible(cachedVisibleSize: number): InvisibleSizing;
}
export interface ISplitViewDescriptor {
    size: number;
    views: {
        visible?: boolean;
        size: number;
        view: IView;
    }[];
}
export declare class Splitview {
    private readonly container;
    private element;
    private viewContainer;
    private sashContainer;
    private views;
    private sashes;
    private _orientation;
    private _size;
    private _orthogonalSize;
    private contentSize;
    private _proportions;
    private proportionalLayout;
    private readonly _onDidSashEnd;
    readonly onDidSashEnd: Event<void>;
    private readonly _onDidAddView;
    readonly onDidAddView: Event<IView>;
    private readonly _onDidRemoveView;
    readonly onDidRemoveView: Event<IView>;
    get size(): number;
    set size(value: number);
    get orthogonalSize(): number;
    set orthogonalSize(value: number);
    get length(): number;
    get proportions(): number[] | undefined;
    get orientation(): Orientation;
    set orientation(value: Orientation);
    get minimumSize(): number;
    get maximumSize(): number;
    private _startSnappingEnabled;
    get startSnappingEnabled(): boolean;
    set startSnappingEnabled(startSnappingEnabled: boolean);
    private _endSnappingEnabled;
    get endSnappingEnabled(): boolean;
    set endSnappingEnabled(endSnappingEnabled: boolean);
    constructor(container: HTMLElement, options: SplitViewOptions);
    style(styles?: ISplitviewStyles): void;
    isViewVisible(index: number): boolean;
    setViewVisible(index: number, visible: boolean): void;
    getViewSize(index: number): number;
    resizeView(index: number, size: number): void;
    getViews<T extends IView>(): T[];
    private onDidChange;
    addView(view: IView, size?: number | Sizing, index?: number, skipLayout?: boolean): void;
    distributeViewSizes(): void;
    removeView(index: number, sizing?: Sizing, skipLayout?: boolean): IView;
    getViewCachedVisibleSize(index: number): number | undefined;
    moveView(from: number, to: number): void;
    layout(size: number, orthogonalSize: number): void;
    private relayout;
    private distributeEmptySpace;
    private saveProportions;
    private layoutViews;
    private findFirstSnapIndex;
    private updateSashEnablement;
    private updateSash;
    private resize;
    private createViewContainer;
    private createSashContainer;
    private createContainer;
    dispose(): void;
}
