import { Event } from '../events';
import { IDisposable } from '../lifecycle';
import { IView, LayoutPriority } from '../splitview/splitview';
export type EdgeGroupPosition = 'top' | 'bottom' | 'left' | 'right';
export interface EdgeGroupOptions {
    id: string;
    initialSize?: number;
    minimumSize?: number;
    maximumSize?: number;
    collapsedSize?: number;
    collapsed?: boolean;
}
export interface SerializedEdgeGroups {
    top?: {
        size: number;
        visible: boolean;
        collapsed?: boolean;
        group?: unknown;
    };
    bottom?: {
        size: number;
        visible: boolean;
        collapsed?: boolean;
        group?: unknown;
    };
    left?: {
        size: number;
        visible: boolean;
        collapsed?: boolean;
        group?: unknown;
    };
    right?: {
        size: number;
        visible: boolean;
        collapsed?: boolean;
        group?: unknown;
    };
}
/**
 * Minimal interface for a edge group host.
 * Avoids circular imports by not referencing DockviewGroupPanel directly.
 */
export interface IEdgeGroupHost {
    readonly element: HTMLElement;
    layout(width: number, height: number): void;
}
export declare class EdgeGroupView implements IView {
    private readonly _group;
    private readonly _orientation;
    private readonly _onDidChange;
    readonly onDidChange: Event<{
        size?: number;
        orthogonalSize?: number;
    }>;
    readonly snap = false;
    readonly priority = LayoutPriority.Low;
    private _isCollapsed;
    private _lastExpandedSize;
    private _collapsedSize;
    private _expandedMinimumSize;
    private readonly _expandedMaximumSize;
    get minimumSize(): number;
    get maximumSize(): number;
    get element(): HTMLElement;
    get isCollapsed(): boolean;
    get lastExpandedSize(): number;
    get collapsedSize(): number;
    constructor(options: EdgeGroupOptions, group: IEdgeGroupHost, orientation: 'horizontal' | 'vertical');
    layout(size: number, orthogonalSize: number): void;
    setCollapsed(collapsed: boolean): void;
    setVisible(_visible: boolean): void;
    /**
     * Restore the last-expanded size from serialized state without triggering
     * a layout. Must be called before setCollapsed(true) during fromJSON so
     * that expanding after deserialization restores the correct size.
     */
    restoreExpandedSize(size: number): void;
    /**
     * Apply new effective collapsed and expanded-minimum sizes after a theme
     * or gap change. The caller (ShellManager) is responsible for computing
     * the correct values from the original config and the new gap.
     */
    updateCollapsedSize(newCollapsedSize: number, newExpandedMinimumSize: number): void;
    dispose(): void;
}
export declare class ShellManager implements IDisposable {
    private readonly _outerSplitview;
    private readonly _middleColumn;
    private readonly _shellElement;
    private _topView;
    private _bottomView;
    private _leftView;
    private _rightView;
    private _leftIndex;
    private _middleIndex;
    private _rightIndex;
    private readonly _disposables;
    private readonly _viewConfigs;
    private _currentWidth;
    private _currentHeight;
    private _gap;
    private _defaultCollapsedSize;
    constructor(container: HTMLElement, dockviewElement: HTMLElement, layoutGrid: (width: number, height: number) => void, gap?: number, defaultCollapsedSize?: number);
    get element(): HTMLElement;
    /**
     * Add an edge group view at the given position. The view wraps the
     * provided group element inside the shell's splitview layout.
     * Throws if a group at this position is already registered.
     */
    addEdgeView(position: EdgeGroupPosition, options: EdgeGroupOptions, group: IEdgeGroupHost): EdgeGroupView;
    layout(width: number, height: number): void;
    /**
     * Called when the active theme changes. Updates splitview margins and
     * edge-group collapsed sizes so the layout matches the new theme's gap
     * and tab-strip dimensions.
     */
    updateTheme(gap: number, defaultCollapsedSize: number): void;
    removeEdgeView(position: EdgeGroupPosition): void;
    hasEdgeGroup(position: EdgeGroupPosition): boolean;
    setEdgeGroupVisible(position: EdgeGroupPosition, visible: boolean): void;
    isEdgeGroupVisible(position: EdgeGroupPosition): boolean;
    setEdgeGroupCollapsed(position: EdgeGroupPosition, collapsed: boolean): void;
    isEdgeGroupCollapsed(position: EdgeGroupPosition): boolean;
    private _getView;
    toJSON(): SerializedEdgeGroups;
    fromJSON(data: SerializedEdgeGroups): void;
    dispose(): void;
}
