import { Position } from '../dnd/droptarget';
import { IDockviewComponent } from '../dockview/dockviewComponent';
import { Event } from '../events';
import { IGridPanelView } from '../gridview/baseComponentGridview';
import { IViewSize } from '../gridview/gridview';
import { CompositeDisposable, IDisposable } from '../lifecycle';
import { PanelInitParameters, PanelUpdateEvent } from '../panel/types';
import { IGroupPanel } from './groupPanel';
import { GroupviewPanel } from './groupviewPanel';
import { DockviewDropTargets } from './dnd';
export declare enum GroupChangeKind2 {
    ADD_PANEL = "ADD_PANEL",
    REMOVE_PANEL = "REMOVE_PANEL",
    PANEL_ACTIVE = "PANEL_ACTIVE",
    GROUP_ACTIVE = "GROUP_ACTIVE"
}
export interface DndService {
    canDisplayOverlay(group: IGroupview, event: DragEvent, target: DockviewDropTargets): boolean;
    onDrop(group: IGroupview, event: DragEvent, position: Position, index?: number): void;
}
export interface IGroupItem {
    id: string;
    header: {
        element: HTMLElement;
    };
    body: {
        element: HTMLElement;
    };
}
interface GroupMoveEvent {
    groupId: string;
    itemId: string;
    target: Position;
    index?: number;
}
export interface GroupOptions {
    readonly panels?: IGroupPanel[];
    readonly activePanel?: IGroupPanel;
    readonly id?: string;
    tabHeight?: number;
}
export interface GroupviewChangeEvent {
    readonly kind: GroupChangeKind2;
    readonly panel?: IGroupPanel;
}
export interface GroupPanelViewState {
    views: string[];
    activeView?: string;
    id: string;
}
export interface IGroupview extends IDisposable, IGridPanelView {
    readonly isActive: boolean;
    readonly size: number;
    readonly panels: IGroupPanel[];
    readonly tabHeight: number | undefined;
    isPanelActive: (panel: IGroupPanel) => boolean;
    activePanel: IGroupPanel | undefined;
    indexOf(panel: IGroupPanel): number;
    openPanel(panel: IGroupPanel, options?: {
        index?: number;
        skipFocus?: boolean;
    }): void;
    closePanel(panel: IGroupPanel): Promise<boolean>;
    closeAllPanels(): Promise<boolean>;
    containsPanel(panel: IGroupPanel): boolean;
    removePanel: (panelOrId: IGroupPanel | string) => IGroupPanel;
    onDidGroupChange: Event<GroupviewChangeEvent>;
    onMove: Event<GroupMoveEvent>;
    moveToNext(options?: {
        panel?: IGroupPanel;
        suppressRoll?: boolean;
    }): void;
    moveToPrevious(options?: {
        panel?: IGroupPanel;
        suppressRoll?: boolean;
    }): void;
    isContentFocused(): boolean;
    updateActions(): void;
    canDisplayOverlay(event: DragEvent, target: DockviewDropTargets): boolean;
}
export declare class Groupview extends CompositeDisposable implements IGroupview {
    private readonly container;
    private accessor;
    id: string;
    private readonly options;
    private readonly parent;
    private readonly tabsContainer;
    private readonly contentContainer;
    private readonly dropTarget;
    private _activePanel?;
    private watermark?;
    private _isGroupActive;
    private mostRecentlyUsed;
    private readonly _onDidChange;
    readonly onDidChange: Event<IViewSize | undefined>;
    private _width;
    private _height;
    private _panels;
    private readonly _onMove;
    readonly onMove: Event<GroupMoveEvent>;
    private readonly _onDidGroupChange;
    readonly onDidGroupChange: Event<GroupviewChangeEvent>;
    get element(): HTMLElement;
    get activePanel(): IGroupPanel | undefined;
    get tabHeight(): number | undefined;
    set tabHeight(height: number | undefined);
    get isActive(): boolean;
    get panels(): IGroupPanel[];
    get size(): number;
    get isEmpty(): boolean;
    get minimumHeight(): number;
    get maximumHeight(): number;
    get minimumWidth(): number;
    get maximumWidth(): number;
    constructor(container: HTMLElement, accessor: IDockviewComponent, id: string, options: GroupOptions, parent: GroupviewPanel);
    initialize(): void;
    isContentFocused(): boolean;
    indexOf(panel: IGroupPanel): number;
    toJSON(): GroupPanelViewState;
    moveToNext(options?: {
        panel?: IGroupPanel;
        suppressRoll?: boolean;
    }): void;
    moveToPrevious(options?: {
        panel?: IGroupPanel;
        suppressRoll?: boolean;
    }): void;
    containsPanel(panel: IGroupPanel): boolean;
    init(params: PanelInitParameters): void;
    update(params: PanelUpdateEvent): void;
    focus(): void;
    openPanel(panel: IGroupPanel, options?: {
        index?: number;
        skipFocus?: boolean;
    }): void;
    removePanel(groupItemOrId: IGroupPanel | string): IGroupPanel;
    closeAllPanels(): Promise<boolean>;
    closePanel: (panel: IGroupPanel) => Promise<boolean>;
    private doClose;
    isPanelActive(panel: IGroupPanel): boolean;
    updateActions(): void;
    setActive(isGroupActive: boolean, skipFocus?: boolean, force?: boolean): void;
    layout(width: number, height: number): void;
    private _removePanel;
    private doRemovePanel;
    private doAddPanel;
    private doSetActivePanel;
    private updateMru;
    private updateContainer;
    canDisplayOverlay(dragOverEvent: DragEvent, target: DockviewDropTargets): boolean;
    private handleDropEvent;
    dispose(): void;
}
export {};
