dockview-core
Version:
Zero dependency layout manager supporting tabs, groups, grids and splitviews for vanilla TypeScript
129 lines (128 loc) • 4.63 kB
TypeScript
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;
}