import { SerializedGridObject } from '../gridview/gridview';
import { Position } from '../dnd/droptarget';
import { GroupviewPanelState, IGroupPanel } from '../groupview/groupPanel';
import { Event } from '../events';
import { IWatermarkRenderer } from '../groupview/types';
import { IPanelDeserializer } from './deserializer';
import { AddGroupOptions, AddPanelOptions, DockviewOptions as DockviewComponentOptions, MovementOptions, TabContextMenuEvent } from './options';
import { BaseGrid, IBaseGrid } from '../gridview/baseComponentGridview';
import { LayoutMouseEvent } from '../groupview/tab';
import { Orientation } from '../splitview/core/splitview';
import { GroupOptions, GroupPanelViewState } from '../groupview/groupview';
import { GroupviewPanel } from '../groupview/groupviewPanel';
export interface PanelReference {
    update: (event: {
        params: {
            [key: string]: any;
        };
    }) => void;
    remove: () => void;
}
export interface SerializedDockview {
    grid: {
        root: SerializedGridObject<GroupPanelViewState>;
        height: number;
        width: number;
        orientation: Orientation;
    };
    panels: {
        [key: string]: GroupviewPanelState;
    };
    activeGroup?: string;
    options: {
        tabHeight?: number;
    };
}
export declare type DockviewComponentUpdateOptions = Pick<DockviewComponentOptions, 'orientation' | 'components' | 'frameworkComponents' | 'tabComponents' | 'frameworkTabComponents'>;
export interface IDockviewComponent extends IBaseGrid<GroupviewPanel> {
    readonly activePanel: IGroupPanel | undefined;
    readonly totalPanels: number;
    readonly panels: IGroupPanel[];
    tabHeight: number | undefined;
    deserializer: IPanelDeserializer | undefined;
    updateOptions(options: DockviewComponentUpdateOptions): void;
    moveGroupOrPanel(referenceGroup: GroupviewPanel, groupId: string, itemId: string, target: Position, index?: number): void;
    doSetGroupActive: (group: GroupviewPanel, skipFocus?: boolean) => void;
    removeGroup: (group: GroupviewPanel) => void;
    options: DockviewComponentOptions;
    addPanel(options: AddPanelOptions): IGroupPanel;
    removePanel(panel: IGroupPanel): void;
    getGroupPanel: (id: string) => IGroupPanel | undefined;
    fireMouseEvent(event: LayoutMouseEvent): void;
    createWatermarkComponent(): IWatermarkRenderer;
    addEmptyGroup(options?: AddGroupOptions): void;
    closeAllGroups: () => Promise<boolean>;
    onTabInteractionEvent: Event<LayoutMouseEvent>;
    onTabContextMenu: Event<TabContextMenuEvent>;
    moveToNext(options?: MovementOptions): void;
    moveToPrevious(options?: MovementOptions): void;
    setActivePanel(panel: IGroupPanel): void;
    focus(): void;
    toJSON(): SerializedDockview;
    fromJSON(data: SerializedDockview): void;
}
export declare class DockviewComponent extends BaseGrid<GroupviewPanel> implements IDockviewComponent {
    private readonly _panels;
    private readonly dirtyPanels;
    private readonly debouncedDeque;
    private readonly _onTabInteractionEvent;
    readonly onTabInteractionEvent: Event<LayoutMouseEvent>;
    private readonly _onTabContextMenu;
    readonly onTabContextMenu: Event<TabContextMenuEvent>;
    private _deserializer;
    private panelState;
    private _api;
    private _options;
    get totalPanels(): number;
    get panels(): IGroupPanel[];
    get deserializer(): IPanelDeserializer | undefined;
    set deserializer(value: IPanelDeserializer | undefined);
    get options(): DockviewComponentOptions;
    get activePanel(): IGroupPanel | undefined;
    set tabHeight(height: number | undefined);
    get tabHeight(): number | undefined;
    constructor(element: HTMLElement, options: DockviewComponentOptions);
    updateOptions(options: DockviewComponentUpdateOptions): void;
    focus(): void;
    getGroupPanel(id: string): IGroupPanel | undefined;
    setActivePanel(panel: IGroupPanel): void;
    moveToNext(options?: MovementOptions): void;
    moveToPrevious(options?: MovementOptions): void;
    private registerPanel;
    private unregisterPanel;
    /**
     * Serialize the current state of the layout
     *
     * @returns A JSON respresentation of the layout
     */
    toJSON(): SerializedDockview;
    fromJSON(data: SerializedDockview): void;
    closeAllGroups(): Promise<boolean>;
    fireMouseEvent(event: LayoutMouseEvent): void;
    addPanel(options: AddPanelOptions): IGroupPanel;
    removePanel(panel: IGroupPanel): void;
    createWatermarkComponent(): IWatermarkRenderer;
    addEmptyGroup(options: AddGroupOptions): void;
    removeGroup(group: GroupviewPanel): void;
    moveGroupOrPanel(referenceGroup: GroupviewPanel, groupId: string, itemId: string, target: Position, index?: number): void;
    doSetGroupActive(group: GroupviewPanel | undefined, skipFocus?: boolean): void;
    createGroup(options?: GroupOptions): GroupviewPanel;
    dispose(): void;
    /**
     * Ensure the local copy of the layout state is up-to-date
     */
    private syncConfigs;
    private _addPanel;
    private createContentComponent;
    private createTabComponent;
    private addPanelToNewGroup;
    private findGroup;
    private addDirtyPanel;
}
