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; }