import { DockviewApi } from '../api/component.api'; import { PanelTransfer } from '../dnd/dataTransfer'; import { Position } from '../dnd/droptarget'; import { DockviewComponent } from './dockviewComponent'; import { DockviewEvent, Event } from '../events'; import { DockviewGroupDropLocation, DockviewWillShowOverlayLocationEvent } from './events'; import { IViewSize } from '../gridview/gridview'; import { CompositeDisposable } from '../lifecycle'; import { IPanel, PanelInitParameters, PanelUpdateEvent, Parameters } from '../panel/types'; import { GroupDragEvent, TabDragEvent } from './components/titlebar/tabsContainer'; import { DockviewGroupPanel } from './dockviewGroupPanel'; import { IDockviewPanel } from './dockviewPanel'; import { DockviewDndOverlayEvent, DockviewHeaderDirection, DockviewHeaderPosition } from './options'; import { OverlayRenderContainer } from '../overlay/overlayRenderContainer'; import { TitleEvent } from '../api/dockviewPanelApi'; import { Contraints } from '../gridview/gridviewPanel'; import { DropTargetAnchorContainer } from '../dnd/dropTargetAnchorContainer'; import { ITabGroup, SerializedTabGroup, TabGroupOptions } from './tabGroup'; import { EdgeGroupPosition } from './dockviewShell'; interface GroupMoveEvent { groupId: string; itemId?: string; target: Position; index?: number; tabGroupId?: string; } interface CoreGroupOptions { locked?: DockviewGroupPanelLocked; hideHeader?: boolean; headerPosition?: 'top' | 'bottom' | 'left' | 'right'; skipSetActive?: boolean; constraints?: Partial; initialWidth?: number; initialHeight?: number; } export interface GroupOptions extends CoreGroupOptions { readonly panels?: IDockviewPanel[]; readonly activePanel?: IDockviewPanel; readonly id?: string; } export interface GroupPanelViewState extends CoreGroupOptions { views: string[]; activeView?: string; id: string; tabGroups?: SerializedTabGroup[]; } export interface DockviewGroupChangeEvent { readonly panel: IDockviewPanel; } export interface CreateTabGroupOptions extends TabGroupOptions { id?: string; } export declare class DockviewDidDropEvent extends DockviewEvent { private readonly options; get nativeEvent(): DragEvent; get position(): Position; get panel(): IDockviewPanel | undefined; get group(): DockviewGroupPanel | undefined; get api(): DockviewApi; constructor(options: { readonly nativeEvent: DragEvent; readonly position: Position; readonly panel?: IDockviewPanel; getData(): PanelTransfer | undefined; group?: DockviewGroupPanel; api: DockviewApi; }); getData(): PanelTransfer | undefined; } export declare class DockviewWillDropEvent extends DockviewDidDropEvent { private readonly _kind; get kind(): DockviewGroupDropLocation; constructor(options: { readonly nativeEvent: DragEvent; readonly position: Position; readonly panel?: IDockviewPanel; getData(): PanelTransfer | undefined; kind: DockviewGroupDropLocation; group?: DockviewGroupPanel; api: DockviewApi; }); } export interface IHeader { hidden: boolean; direction: DockviewHeaderDirection; } export type DockviewGroupPanelLocked = boolean | 'no-drop-target'; export interface IDockviewGroupPanelModel extends IPanel { readonly isActive: boolean; readonly size: number; readonly panels: IDockviewPanel[]; readonly activePanel: IDockviewPanel | undefined; readonly header: IHeader; readonly isContentFocused: boolean; readonly onDidDrop: Event; readonly onWillDrop: Event; readonly onDidAddPanel: Event; readonly onDidRemovePanel: Event; readonly onDidActivePanelChange: Event; readonly onMove: Event; locked: DockviewGroupPanelLocked; headerPosition: DockviewHeaderPosition; setActive(isActive: boolean): void; initialize(): void; isPanelActive: (panel: IDockviewPanel) => boolean; indexOf(panel: IDockviewPanel): number; openPanel(panel: IDockviewPanel, options?: { index?: number; skipFocus?: boolean; skipSetPanelActive?: boolean; skipSetGroupActive?: boolean; }): void; closePanel(panel: IDockviewPanel): void; closeAllPanels(): void; containsPanel(panel: IDockviewPanel): boolean; removePanel: (panelOrId: IDockviewPanel | string) => IDockviewPanel; moveToNext(options?: { panel?: IDockviewPanel; suppressRoll?: boolean; }): void; moveToPrevious(options?: { panel?: IDockviewPanel; suppressRoll?: boolean; }): void; canDisplayOverlay(event: DragEvent, position: Position, target: DockviewGroupDropLocation): boolean; } export type DockviewGroupLocation = { type: 'grid'; } | { type: 'floating'; } | { type: 'popout'; getWindow: () => Window; popoutUrl?: string; } | { type: 'edge'; position: EdgeGroupPosition; }; export declare class DockviewGroupPanelModel extends CompositeDisposable implements IDockviewGroupPanelModel { private readonly container; private readonly accessor; id: string; private readonly options; private readonly groupPanel; private readonly tabsContainer; private readonly contentContainer; private _activePanel; private watermark?; private _isGroupActive; private _locked; private _rightHeaderActions; private _leftHeaderActions; private _prefixHeaderActions; private readonly _rightHeaderActionsDisposable; private readonly _leftHeaderActionsDisposable; private readonly _prefixHeaderActionsDisposable; private _headerPosition; private _location; private mostRecentlyUsed; private _overwriteRenderContainer; private _overwriteDropTargetContainer; private readonly _onDidChange; readonly onDidChange: Event; private _width; private _height; private readonly _panels; private readonly _panelDisposables; private readonly _tabGroupDisposables; private readonly _pendingMicrotaskDisposables; private readonly _onMove; readonly onMove: Event; private readonly _onDidDrop; readonly onDidDrop: Event; private readonly _onWillDrop; readonly onWillDrop: Event; private readonly _onWillShowOverlay; readonly onWillShowOverlay: Event; private readonly _onTabDragStart; readonly onTabDragStart: Event; private readonly _onGroupDragStart; readonly onGroupDragStart: Event; private readonly _onDidAddPanel; readonly onDidAddPanel: Event; private readonly _onDidPanelTitleChange; readonly onDidPanelTitleChange: Event; private readonly _onDidPanelParametersChange; readonly onDidPanelParametersChange: Event; private readonly _onDidRemovePanel; readonly onDidRemovePanel: Event; private readonly _onDidActivePanelChange; readonly onDidActivePanelChange: Event; private readonly _onUnhandledDragOverEvent; readonly onUnhandledDragOverEvent: Event; private readonly _tabGroups; private readonly _tabGroupMap; private readonly _panelToTabGroup; private _tabGroupIdCounter; private _pendingTabGroupUpdate; private readonly _onDidCreateTabGroup; readonly onDidCreateTabGroup: Event<{ tabGroup: ITabGroup; }>; private readonly _onDidDestroyTabGroup; readonly onDidDestroyTabGroup: Event<{ tabGroup: ITabGroup; }>; private readonly _onDidAddPanelToTabGroup; readonly onDidAddPanelToTabGroup: Event<{ tabGroup: ITabGroup; panelId: string; }>; private readonly _onDidRemovePanelFromTabGroup; readonly onDidRemovePanelFromTabGroup: Event<{ tabGroup: ITabGroup; panelId: string; }>; private readonly _onDidTabGroupChange; readonly onDidTabGroupChange: Event<{ tabGroup: ITabGroup; }>; private readonly _onDidTabGroupCollapsedChange; readonly onDidTabGroupCollapsedChange: Event<{ tabGroup: ITabGroup; }>; private readonly _api; get tabGroups(): readonly ITabGroup[]; get element(): HTMLElement; get activePanel(): IDockviewPanel | undefined; get locked(): DockviewGroupPanelLocked; set locked(value: DockviewGroupPanelLocked); get isActive(): boolean; get panels(): IDockviewPanel[]; get size(): number; get isEmpty(): boolean; get hasWatermark(): boolean; get header(): IHeader; get isContentFocused(): boolean; get headerPosition(): DockviewHeaderPosition; set headerPosition(value: DockviewHeaderPosition); get location(): DockviewGroupLocation; set location(value: DockviewGroupLocation); constructor(container: HTMLElement, accessor: DockviewComponent, id: string, options: GroupOptions, groupPanel: DockviewGroupPanel); private _scheduleTabGroupUpdate; createTabGroup(options?: CreateTabGroupOptions): ITabGroup; dissolveTabGroup(tabGroupId: string): void; addPanelToTabGroup(tabGroupId: string, panelId: string, index?: number): void; /** * Move a panel to a new index within its tab group. * Updates both the group's panelIds order and the flat _panels array. */ movePanelWithinGroup(tabGroupId: string, panelId: string, newIndex: number): void; /** * Move a panel from one tab group to another. */ movePanelBetweenGroups(sourcePanelId: string, targetTabGroupId: string, targetIndex?: number): void; /** * Move an entire tab group to a new position in the tab bar. * The group's internal panel order is preserved. */ moveTabGroup(tabGroupId: string, targetIndex: number): void; /** * Ensure a panel is at the correct global index in _panels * to maintain contiguity of its tab group members. */ private _enforceContiguity; /** * Compute the global index in _panels for a group-local index. * Finds where the group's panels start in the flat array and offsets. */ private _computeGlobalIndex; removePanelFromTabGroup(panelId: string): void; getTabGroups(): readonly ITabGroup[]; updateTabGroups(): void; refreshTabGroupAccent(): void; refreshWatermark(): void; getTabGroupForPanel(panelId: string): ITabGroup | undefined; private _findTabGroupForPanel; private _removeTabGroupInternal; private _handleGroupCollapse; private _handleGroupExpand; /** Restore tab groups from serialized data (used by fromJSON) */ restoreTabGroups(serializedGroups: SerializedTabGroup[]): void; focusContent(): void; set renderContainer(value: OverlayRenderContainer | null); get renderContainer(): OverlayRenderContainer; set dropTargetContainer(value: DropTargetAnchorContainer | null); get dropTargetContainer(): DropTargetAnchorContainer | null; initialize(): void; updateHeaderActions(): void; rerender(panel: IDockviewPanel): void; indexOf(panel: IDockviewPanel): number; toJSON(): GroupPanelViewState; moveToNext(options?: { panel?: IDockviewPanel; suppressRoll?: boolean; }): void; moveToPrevious(options?: { panel?: IDockviewPanel; suppressRoll?: boolean; }): void; containsPanel(panel: IDockviewPanel): boolean; init(_params: PanelInitParameters): void; update(_params: PanelUpdateEvent): void; focus(): void; openPanel(panel: IDockviewPanel, options?: { index?: number; skipSetActive?: boolean; skipSetGroupActive?: boolean; }): void; removePanel(groupItemOrId: IDockviewPanel | string, options?: { skipSetActive?: boolean; skipSetActiveGroup?: boolean; }): IDockviewPanel; closeAllPanels(): void; closePanel(panel: IDockviewPanel): void; private doClose; isPanelActive(panel: IDockviewPanel): boolean; updateActions(element: HTMLElement | undefined): void; setActive(isGroupActive: boolean, force?: boolean): void; layout(width: number, height: number): void; private _removePanel; private doRemovePanel; private doAddPanel; private doSetActivePanel; private updateMru; private updateContainer; canDisplayOverlay(event: DragEvent, position: Position, target: DockviewGroupDropLocation): boolean; private handleDropEvent; updateDragAndDropState(): void; dispose(): void; } export {};