import { Emitter, Event } from '../events';
import { Gridview, IGridView } from './gridview';
import { Position } from '../dnd/droptarget';
import { CompositeDisposable, IValueDisposable } from '../lifecycle';
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
import { IPanel } from '../panel/types';
import { MovementOptions2 } from '../dockview/options';
import { IGroupPanel } from '../groupview/groupPanel';
export declare enum GroupChangeKind {
    ADD_PANEL = "ADD_PANEL",
    REMOVE_PANEL = "REMOVE_PANEL",
    PANEL_ACTIVE = "PANEL_ACTIVE",
    GROUP_ACTIVE = "GROUP_ACTIVE",
    ADD_GROUP = "ADD_GROUP",
    REMOVE_GROUP = "REMOVE_GROUP",
    LAYOUT_FROM_JSON = "LAYOUT_FROM_JSON",
    LAYOUT = "LAYOUT"
}
export interface GroupChangeEvent {
    readonly kind: GroupChangeKind;
    readonly panel?: IGroupPanel;
}
export declare type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
export declare function toTarget(direction: Direction): Position;
export interface BaseGridOptions {
    readonly proportionalLayout?: boolean;
    readonly orientation: Orientation;
    readonly styles?: ISplitviewStyles;
}
export interface IGridPanelView extends IGridView, IPanel {
    setActive(isActive: boolean): void;
    readonly isActive: boolean;
}
export interface IBaseGrid<T extends IGridPanelView> {
    readonly element: HTMLElement;
    readonly id: string;
    readonly width: number;
    readonly height: number;
    readonly minimumHeight: number;
    readonly maximumHeight: number;
    readonly minimumWidth: number;
    readonly maximumWidth: number;
    readonly activeGroup: T | undefined;
    readonly size: number;
    readonly groups: T[];
    readonly onGridEvent: Event<GroupChangeEvent>;
    readonly onDidLayoutChange: Event<void>;
    getPanel(id: string): T | undefined;
    toJSON(): object;
    fromJSON(data: any): void;
    layout(width: number, height: number, force?: boolean): void;
    resizeToFit(): void;
    setVisible(panel: T, visible: boolean): void;
    isVisible(panel: T): boolean;
}
export declare abstract class BaseGrid<T extends IGridPanelView> extends CompositeDisposable implements IBaseGrid<T> {
    private readonly _element;
    private readonly _id;
    protected readonly _groups: Map<string, IValueDisposable<T>>;
    protected readonly gridview: Gridview;
    protected _activeGroup: T | undefined;
    protected readonly _onGridEvent: Emitter<GroupChangeEvent>;
    readonly onGridEvent: Event<GroupChangeEvent>;
    private _onDidLayoutChange;
    readonly onDidLayoutChange: Event<void>;
    get id(): string;
    get element(): HTMLElement;
    get size(): number;
    get groups(): T[];
    get width(): number;
    get height(): number;
    get minimumHeight(): number;
    get maximumHeight(): number;
    get minimumWidth(): number;
    get maximumWidth(): number;
    get activeGroup(): T | undefined;
    constructor(_element: HTMLElement, options: BaseGridOptions);
    abstract toJSON(): object;
    abstract fromJSON(data: any): void;
    setVisible(panel: T, visible: boolean): void;
    isVisible(panel: T): boolean;
    protected doAddGroup(group: T, location?: number[], size?: number): void;
    protected doRemoveGroup(group: T, options?: {
        skipActive?: boolean;
        skipDispose?: boolean;
    }): T;
    getPanel(id: string): T | undefined;
    doSetGroupActive(group: T | undefined, skipFocus?: boolean): void;
    removeGroup(group: T): void;
    moveToNext(options?: MovementOptions2): void;
    moveToPrevious(options?: MovementOptions2): void;
    layout(width: number, height: number, forceResize?: boolean): void;
    /**
     * Resize the layout to fit the parent container
     */
    resizeToFit(): void;
    dispose(): void;
}
